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

git-svn-id: https://svn.apache.org/repos/asf/ant/core/tags/MYRMIDON_PRE_CONF_MUNGE@271738 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/.cvsignore b/.cvsignore
deleted file mode 100644
index 69abaa7..0000000
--- a/.cvsignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.ant.properties
-dist
-build
-bootstrap
-distribution
-prj.el
-emacs-jprj.el
-bootstrap.bat.pif
-velocity.log
-
diff --git a/KEYS b/KEYS
deleted file mode 100644
index a1aaca3..0000000
--- a/KEYS
+++ /dev/null
@@ -1,130 +0,0 @@
-This file contains the PGP keys of various developers.
-Please don't use them for email unless you have to. Their main
-purpose is code signing.
-
-Users: pgp < KEYS
-Developers: 
-	pgp -kxa <your name> and append it to this file.
-	(pgpk -ll <your name> && pgpk -xa <your name>) >> this file.
-        (gpg --list-sigs <your name>
-             && gpg --armor --export <your name>) >> this file.
-
-Type Bits/KeyID    Date       User ID
-pub  1024/FEECAAED 1998/11/11 Stefan Bodewig <bodewig@bost.de>
-                              Stefan Bodewig <bodewig@apache.org>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: 2.6.3i
-
-mQCNAzZJoiMAAAEEAMzhUxTOC20Nprp6K4nLTiARt+EXii/dovNWWcfzZcYXi/lX
-r3zpUTTZxlKQpd4RaHjFmGgoOraZE4jCRFARVcFJgYmGUKpcWJZO7YKL36WUizTM
-+dyB2ycOtzlty1W5VmRL3FGqo67pKA9F/QHg3NSu9hY1W9xPPK7Kq3f+7KrtAAUR
-tCBTdGVmYW4gQm9kZXdpZyA8Ym9kZXdpZ0Bib3N0LmRlPokAlQIFEDZSrGXHcgyK
-jiW9zQEBshEEAMlG4qVjKp4/agdJG56M6izx9oaKecFLXHQJrFUy3w2PvZHFYtXc
-osXKorX6bPrE8uB57MxbY2WapKeVRodlG0+j39vAf501duK8q2rktfWt9Cl4JjJ4
-DbWhSWfV1ci62u2gCxwYQe22F9Wh+vhOR5NK9RTbSKhupdlFsnrk/i7xiQCVAwUQ
-NkmiI67Kq3f+7KrtAQGdxQQAlcFOzSv7G6M4uGbgvw7IGgrhx7rawtIyv9hLXgVC
-7ua9xaZV8G0Fl9gh8RnbdcZ4R/aT+KIiAFaslfZ3t6hlC4MTbnAJqvdS/NO98ZkJ
-YvnzZSKHflAbd5gyE7IVxBC9/xRlF/Wls5sYNwb6RjoRCaOjxN/y3WCLa3Va101v
-zNy0I1N0ZWZhbiBCb2Rld2lnIDxib2Rld2lnQGFwYWNoZS5vcmc+iQCVAwUQOxIo
-BK7Kq3f+7KrtAQGn6gP/SBACdHakA4H//otpyESSrk4PmyOaYF0Kyok43Gee2mT+
-m9+jZ3jLcC0oav6iH+otL/lhk9t/JDM8LjD2kAkdWWoIvvuPyCx97gOzojIo0Ve2
-1wuxJTF/VIjwyOtE8FzE7p4tkc6EubVpeZkV9Pq9HFRBCUcyKJDLnF4tbstScLU=
-=OBLe
------END PGP PUBLIC KEY BLOCK-----
-
-
-
-
-pub  1024D/51898504 2001-05-29 Conor MacNeill <conor@cortexebusiness.com.au>
-uid                            Conor MacNeill <conor@apache.org>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.0.6 (MingW32)
-Comment: For info see http://www.gnupg.org
-
-mQGiBDsTqygRBACiZckNdclTlQFonLaIKBFGhMy0KKByw0x8XA4iwdbCXuF6xNIc
-HIFHajJ74AHchQ4d8xtomBy6b8yvFgWVeaZensvn69BlLeqGdyeJRzfPt6TgRnzZ
-2eWhb0HXdG3JwxL/2BabDhHfs4YJOrgB/vhRFQku6oCMRiBPtJj2werD6wCg0/zp
-jacYTw6+CR+sVvneCNyySFED/R3j10c4RnR8djgv1jKT8CKPuHYraupI9INEe+I6
-7qWjtJ02GzvMO6TElAtUsf4aysu45GgwkwEBnuG6mYb3Pq0V2c5tJc2A3Tj3DrdR
-i3HUNwurbus76I0sPyyENPu12QPeC6mvWLEsxVJ9o0hRKFayGvYUmrwWK9UFLjvp
-p9cXBACDHgLn7MAVLqUdYhRrUj/M+GOUpvBikEgoJJrEUmb5X4+++dffMh5HBIO4
-5LA11qEKuM2xnKqOilP7NLYXz1Fe0ocqv0jsHB4SprFTTai7ma31uwuRQvCQXVv1
-yJ5CLqYda64h/UA2kmmR2dfopmvDogYEMz/HU5voozxe7BEI7bQhQ29ub3IgTWFj
-TmVpbGwgPGNvbm9yQGFwYWNoZS5vcmc+iFcEExECABcFAjsTqygFCwcKAwQDFQMC
-AxYCAQIXgAAKCRCBBGRPUYmFBDgIAKCZztXqKhK6kXOnoGy7opCNmWU0lwCgsPDa
-4m+ruW3ch0rfbqtR75S52R+0LUNvbm9yIE1hY05laWxsIDxjb25vckBjb3J0ZXhl
-YnVzaW5lc3MuY29tLmF1PohXBBMRAgAXBQI7E6xMBQsHCgMEAxUDAgMWAgECF4AA
-CgkQgQRkT1GJhQTY0ACgmZmKheHzjPJs5hybpyvnvEiPYqYAn2+ryxdtz8XyOMEx
-GRmHNlhG7svsuQENBDsTqy0QBACfsCxJ6iCtgX8zjlVtMsMfDqu72x5sYatWKn8c
-u+4Oj5mi0x6azZIhwCa+K3ihLVOyG1mCRnzztGTIxWYRhq3TESIVOfgm+NgLGrmA
-XUTFyCT+21TExLCpuVZKmUHsWXLxDtfQ1diPeQpiQ8+Fvb/4jLGFjFIrQ2VjtFQn
-kumkSwADBgP9H0bF4hdMuVEcSJ9imxSoJshcOOA3Vd2+YiCTZhBygWM49wY5jNos
-/DArIjNCE53IlOu/UtHB2jqkSqjF0soGYsUjeCWouiTP9hLuMKPjnqj9ryJPTDKz
-nTCZ4TuB5CtzrKTlWLmPCPpFsGqe4KjMeKg/mqGqjPKl97xgStK9N9GIRgQYEQIA
-BgUCOxOrLQAKCRCBBGRPUYmFBMM6AJsF3FFyZGEmbt9aGG1W/u0oI9mcLgCfQyJ+
-aalbspazea4J9zgi59SSwOM=
-=Icm2
------END PGP PUBLIC KEY BLOCK-----
-
-pub  1024D/5F6B8B72 2001-05-28 Stefan Bodewig <stefan.bodewig@epost.de>
-sig        5F6B8B72 2002-01-11  Stefan Bodewig <stefan.bodewig@epost.de>
-uid                            Stefan Bodewig <bodewig@apache.org>
-sig        5F6B8B72 2001-05-28  Stefan Bodewig <stefan.bodewig@epost.de>
-sig        51898504 2002-01-11  Conor MacNeill <conor@cortexebusiness.com.au>
-uid                            Stefan Bodewig <bodewig@bost.de>
-sig        5F6B8B72 2001-05-28  Stefan Bodewig <stefan.bodewig@epost.de>
-sig        51898504 2002-01-11  Conor MacNeill <conor@cortexebusiness.com.au>
-sub  1024g/24774157 2001-05-28
-sig        5F6B8B72 2001-05-28  Stefan Bodewig <stefan.bodewig@epost.de>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.0.6 (GNU/Linux)
-Comment: Weitere Infos: siehe http://www.gnupg.org
-
-mQGiBDsSIk4RBADSCj6rUjV64tYCGT1DYKYR7GthyWpNdGHSYLbETBcDatAe1dzQ
-5NsCgfrlybfyeY+y1lxr3T9bqf6zJWDw/718wff96qmmv1qzexSYtmIrj+h53V82
-EXwWOFuYMJisuxdT940iQzosm3GOv4MJdEg3oI2SgfEyRQQ6vO4Ob5rHDwCg5taZ
-nrHOrXx2dIGHxpxRZ0SUl30D/jmtttFjYOQ3LBMriikz5mh2sK3ZnoSRF4o5O0zW
-Ve6e2SFXOEjVjImKsH6KCbdQNelrAdgiyOoXClyQKsQ27pncbdWo6bO0E3POJZVm
-XaeW7iudHVr63rU5PViXObIQrdQl0D59j5brKj4vdlTyUw8kaHPvbKPDEOwvZq4Y
-LJQ5BACA1YilTeXRJqwFsNlpcxCHwlULD4QUVP496prQWf1B7Z6g0KvLGrQsO0Vn
-Jcn+fEqukysTJixSXCPebosltd4RalJIupVYkp4w6MJ7biaDAlLuNhDcI/AiXTmV
-dXUedVXIaM8I3Ne23gucwbAyc0Hvb+3cSAKRhl/azFQhuHBvlrQjU3RlZmFuIEJv
-ZGV3aWcgPGJvZGV3aWdAYXBhY2hlLm9yZz6IVwQTEQIAFwUCOxIiTgULBwoDBAMV
-AwIDFgIBAheAAAoJEKIRWuFfa4tyLJ4An2yKSQ1o+lIF2O6wR/E6NdgYAfkSAJ94
-8O9lic6ZQLUoVU5rjJURUvhVDYhGBBARAgAGBQI8PtWPAAoJEIEEZE9RiYUEnZIA
-njOkQx1BfxN9+E7Yiz4MOxqZjSUpAKDQi0Alv/VR61fmR7KHZ11J2g+HSLQgU3Rl
-ZmFuIEJvZGV3aWcgPGJvZGV3aWdAYm9zdC5kZT6IVwQTEQIAFwUCOxI5gQULBwoD
-BAMVAwIDFgIBAheAAAoJEKIRWuFfa4tyyboAoNoD/9Jgm/alxfAYELz05LMa/HLe
-AKDWTHqq7rMkppZoTUv2gWpVzrk5RIhGBBARAgAGBQI8PtWVAAoJEIEEZE9RiYUE
-0LMAn22/u01Lo3Bo5lDxxHSkayUkYq25AKCm20yaGFGtTDJW4Rdz50pfut1AwrQo
-U3RlZmFuIEJvZGV3aWcgPHN0ZWZhbi5ib2Rld2lnQGVwb3N0LmRlPohXBBMRAgAX
-BQI8Pto2BQsHCgMEAxUDAgMWAgECF4AACgkQohFa4V9ri3Kz/gCg0PlCER3JUjKk
-G8JQe/lIJoApx38AoMW2G1lOuMX54RiWS08tG0j3ON4TuQENBDsSIlQQBADNUpZL
-xCuTKzJ1tMm7b/XjAhvPYKiL3doAZ6XALBdLF/nQmlh1jcuRy93QWpPxtwSfPjcw
-JLHy+Uq5tC1SnH1YwYhviLG1KEsniUBroUmV2HJyHP92fFI3LPk3xbqxvLh1NXFp
-zSuWjGMA66sZqeEbtMy2B8OLRwQShdHIBWgrIwADBQP+PWkmbg2mraaUmgTswre8
-CGArBgcV+WYm6yaq9IC1G4V1PXmlswmsDlsAr6UDdJU46GFZMIi2WmFJHarEkIBw
-FN44ypSLmiEVwKRJE2/CYO0f7zQHcF6GUSwQo2TxneahrZyHs7GdvpcRcfm0YnlC
-/H1CJ3pl8FpfHttzzIrIJviIRgQYEQIABgUCOxIiVAAKCRCiEVrhX2uLcg0yAKCd
-zbaSPxN+OS1Tq7hJRSq53blllwCfQHZvTM+MqMa6LB0pKeQVs1wVLeA=
-=TAHR
------END PGP PUBLIC KEY BLOCK-----
-
-Type Bits/KeyID    Date       User ID
-pub  1024/697ECEDD 2000/04/06 Henri Gomez <hgomez@slib.fr>
-                              *** RPM SIGNING KEY ***
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: 2.6.3i
-
-mQCNAzjsydwAAAEEAMpwFU/ci3/wR3ryCGp9Exr+Rx/hTQ7hWAJcVw8ejlBXlT4T
-yITlRUs0HGfRWxME2J55PuXXsIEPZzjfozNtvOyq8WlLlJ7iaiyWxVRoPJ25sSEj
-C9etm6wjj4E66ZgzuElZkm1m69uEsCHPPNuz1oQ/g1O+SmIVxIYirlxpfs7dAAUR
-tBxIZW5yaSBHb21leiA8aGdvbWV6QHNsaWIuZnI+iQCVAwUQOOzJ3IYirlxpfs7d
-AQFQyQQAj0D9G0hEL7SQGaSCkkoXwvamQw42N8+tNm+jfWHWdE4HAiVlhJmI2GyD
-sdcXVAcR8R7ILIRB5AY7a3bF+qMk0r+vO6oR878RKKn9AvtaAIOnrh6tr0tiPwf5
-XDUMySxIWJEF3SmJAy9Lq3bAl5GMzZCFHiS0NW2gtWgmr/u1RuM=
-=6l+I
------END PGP PUBLIC KEY BLOCK-----
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index b279c7a..0000000
--- a/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/LICENSE.crimson b/LICENSE.crimson
deleted file mode 100644
index 7a042bd..0000000
--- a/LICENSE.crimson
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- *
- * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the 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 "Crimson" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For 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 (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation and was
- * originally based on software copyright (c) 1999, Sun Microsystems, Inc., 
- * http://www.sun.com.  For more information on the Apache Software 
- * Foundation, please see <http://www.apache.org/>.
- */
diff --git a/LICENSE.junit b/LICENSE.junit
deleted file mode 100644
index 8b6ef4c..0000000
--- a/LICENSE.junit
+++ /dev/null
@@ -1,3 +0,0 @@
-The file lib/optional/junit.jar that is included in Apache Ant's CVS
-tree is distributed under the terms of the IBM Public License, see
-<http://www.opensource.org/licenses/ibmpl.html>.
diff --git a/README b/README
deleted file mode 100644
index 3ffeff8..0000000
--- a/README
+++ /dev/null
@@ -1,70 +0,0 @@
-
-                                 A     N     T
- 
-
-  What is it? 
-  -----------
-  
-  Ant is a Java based build tool. In theory it is kind of like "make" 
-  without makes wrinkles and with the full portability of pure java code.
-
-  
-  Why?
-  ----
-  
-  Why another build tool when there is already make, gnumake, nmake, jam, 
-  and others? Because all of those tools have limitations that its 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 and 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.
-  
-  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 use yet another format to use and remember.
-  
-  Ant is different. Instead a model where it is extended with shell based 
-  commands, it 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 which 
-  implements a particular Task interface.
-  
-  Granted, this removes some of the expressive power that is inherent by being 
-  able to construct a shell command such as `find . -name foo -exec rm {}` 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 exec rule that allows different commands to be executed based on the OS 
-  that it is executing on.
-
-  The Latest Version
-  ------------------
-
-  Details of the latest version can be found on the Apache Jakarta
-  Project web site <http://jakarta.apache.org/>.
-
-
-  Documentation
-  -------------
-
-  Documentation is available in HTML format, in the docs/ directory.
-  For information about building and installing Ant, see
-	docs/manual/index.html
-
-
-  Licensing
-  ---------
-
-  This software is licensed under the terms you may find in the file 
-  named "LICENSE" in this directory.
-  
-
-  Thanks for using Ant.
-
-                                          The Apache Jakarta Project
-                                         <http://jakarta.apache.org/>
diff --git a/WHATSNEW b/WHATSNEW
deleted file mode 100644
index 6f59b8f..0000000
--- a/WHATSNEW
+++ /dev/null
@@ -1,862 +0,0 @@
-Changes from Ant 1.4.1 to current CVS version
-==============================================
-
-Changes that could break older environments:
---------------------------------------------
-
-* the RegexpMatcher interface has been extended to support case
-  insensitive matches and other options - custom implementations of
-  this interface won't work any longer.  We recommend to use the new
-  Regexp interface that also supports substitution instead of the
-  RegexpMatcher interface in the future.
-
-* <gzip> will throw an exception if your src attribute points to a directory.
-
-* Unjar, Unzip and Unwar will throw an exception if the Src attribute
-  represents a directory.  Support for nested filesets is provided
-  instead.
-
-* It is no longer possible to overwrite a property using tasks like
-  <condition>, <exec>, <pathconvert>, or <tstamp>. In some exceptional
-  cases it will generate a warning if you attempt to overwrite an
-  existing property.
-  
-* Taskwriters please note: Whenever tasks had any overloaded set* methods,
-  Ant's introspection mechanism would select the last overloaded method
-  provided to it by the Java Runtime.  A modification has now been made such 
-  that when the Java Runtime provides a method with a String as its argument, 
-  a check is made to see if there is another overloaded method that takes in
-  some other type of argument.  If there is one such method, then the method 
-  that takes in String as an argument is not selected by the Introspector.
-  
-* The pattern definition **/._* has been included into the Default 
-  Excludes list.
-  
-* <propertyfile>'s <entry> element was modified to remove "never" as a value
-  as its behavior was undocumented and flakey.
-
-
-Fixed bugs:
------------
-* Fixed bug where <move> ignored <filterset>s.
-
-* Ant works properly with the combination of Java1.4/WindowsXP
-
-* Fixed bug where <java> used to sometimes invoke class constructors twice.
-
-* Fixed bug with 4NT shell support
-
-* Fixed bug where ant would not perform ftp without remotedir being
-  specified even though this was not mandatory.
-
-* Fixed bug where ant would not copy system properties into new Project
-  in ant/antcall tasks when inheritall="false" is set.
-
-* <propertyfile> would not close the original property file.
-
-* <ant> will no longer override a subbuild's basedir with inheritall="true". 
-
-* Fixed problem with the built-in <junit> formatters which assumed
-  that only one test could be running at the same time - this is not
-  necessarily true, see junit.extensions.ActiveTestSuite.
-
-* <jar>'s whenEmpty attribute is useless as JARs are never empty, they
-  contain at least a manifest file, therefore it will now print a
-  warning and do nothing.
-
-* <typedef> hasn't been all that useful as it couldn't be used outside
-  of targets (it can now) and nested "unknown" elements have always
-  been considered to be tasks (changed as well).
-
-* <fixcrlf> would fail for files that contained lines longer than 8kB.
-
-* Some junit formatters incorrectly assumed that all testcases would
-  inherit from junit.framework.TestCase.
-
-* <fixcrlf> dropped the first characters from Mac files.
-
-Other changes:
---------------
-* Users can control what <zip> and <jar> must do when duplicate files 
-  are found.  A new element <zipgroupfileset> allows for multiple zip 
-  files to be merged into the archive.  In addition, <jar> also has 
-  another new attribute: filesetmanifest.  The existing manifest
-  attribute of <jar> now also accepts the name of a jar added through 
-  a fileset.
-
-* gzip now checks that the zipfile is older than the source file
-  before rebuilding the zipfile. 
-
-* New task <loadfile> to load a whole file into a property
-
-* New task <echoproperties> to list your current properties to the screen
-  or a file. 
-
-* A new combined email task, which replaces the old <mail> and
-  <mimemail> tasks, has been added.  The <mimemail> task, and 
-  old SendEmail and MimeMail classes have been deprecated.
-
-* TarFileset takes in three new attributes - fullpath, prefix
-  and preserveLeadingSlashes.
-
-* <move> attempts to rename the directory, if everything inside it is
-  included, before performing file-by-file moves.  This attempt will
-  be done only if filtering is off and if mappers are not used.  This
-  is a performance improvement and there is no change otherwise in
-  the funtionality of this task.
-
-* Exec task has extra attribute "resultproperty" to get the return code
-  into a property.
-  
-* Exec task prints a message when a timed out process is killed.  
-  
-* Added optional attributes - name, arch and version to <os>
-
-* Unjar, Untar, Unwar and Unzip now support patternsets to 
-  select files from an archive for extraction.  Filesets may be 
-  used to select archived files for unarchival.
-
-* Javac task allows debug levels to be specified.  Debug levels
-  will have an effect only when the modern compiler or the 
-  classic compiler (version 1.2 and higher) is used and debugging
-  is enabled.
-
-* Mail task allows specification of port number.
-
-* Added support for specifying CVS_RSH in the <cvs/> task
-
-* New tasks bzip2 and bunzip2 to pack and unpack files using the 
-  BZip2 alogrithm, replaceregexp, checksum, translate, waitfor, input,
-  manifest
-
-* The attributes zipfile, jarfile, warfile and earfile (from the Zip, 
-  Jar, War and Ear tasks) have been deprecated and superseded by a 
-  new attribute "destfile".
-
-* Added a new condition <isset> that test for the existence of a
-  property to the condition task.
-
-* Added new conditions <checksum>, <http>, <socket>, <contains>, <filesmatch>.
-
-* Ant's testcases require JUnit 3.7 or above as they now use the new
-  assertTrue method instead of assert.
-
-* <taskdef> and <typedef> will now emit a warning if a task/type of
-  the given name already exists.
-
-* A new revision of VAJ tasks: The most important new feature
-  is the ability to execute VAJ tasks from the command line by
-  exploiting the Remote Tool Access feature of VAJ.
-
-* Improved support for Novell NetWare.
-
-* Added an optional encoding attribute to <fixcrlf>
-
-* <apply> has a new attribute relative that allows users to pass the
-  filenames as relative instead of absolute paths on the command line.
-
-* References can now be copied into the child build by <ant> and
-  <antcall> using nested <reference> elements or the new inheritRefs
-  attribute.
-
-* <fail> now supports builds to fail based on conditions via if and
-  unless attributes.
-
-* Ant now comes with two new BuildLogger implementations - one that 
-  can send emails containing a log of the build process (MailLogger);
-  the other that colorizes the output based on message levels using
-  ANSI color code escape sequences (AnsiColorLogger).
-
-* A "package" mapper type has been added to allow package directory
-  names replaced with the dotted form.
-  
-* you can now specify environment variables in the <java> and <junit> tasks 
-  if the fork attribute has been set to true.
-  
-* -propertyfile command-line option has been added to load an entire
-  property file just as -D properties are declared (as user properties).
-  -D properties take precedence over -propertyfile specified ones.
-
-* You can now set an ANT_ARGS environment variable to hold arguments you
-  always want passed to the 'ant' command -- for example, if you always
-  want to use a different logger or the -find flag.
-  
-* <tstamp> now supports a new "prefix" attribute to prefix properties set.
-
-* you can now specify the -sourcepath for <javac> explicitly.
-
-* <javac> now supports a new "listfiles" attribute to list the source
-  files it's handing off to the compiler.
-
-* The compiler implementation for javac can now be chosen on a task by
-  task basis.  Use the new compiler attribute of <javac> to override
-  the build.compiler property.
-  
-* <propertyfile>'s <entry> now has a 'unit' attribute to specify the
-  increment/decrement unit on date operations.
-  
-* <property> now supports a 'prefix' attribute when loading from a file
-  or resource.
-
-* In Ant 1.4 a feature has been added to the <junit> task that would
-  add ant.jar, optional.jar and junit.jar implicitly to the classpath -
-  this feature can now be disabled by setting the new includeantruntime
-  attribute to false.
-
-* <style> behaves different than any other directory based task as it
-  processes all files that it finds in included directories in
-  addition to the files matched by your patterns.  There now is a new
-  attribute to suppress this behavior.
-
-* <javadoc> now supports a <tag> nested element to provide the -tag option
-  to the standard Java 1.4 doclet. The element is ignored when not running
-  on Java 1.4.
-
-Changes from Ant 1.4 to Ant 1.4.1
-===========================================
-
-Fixed bugs:
------------
-
-* <ant>'s antfile attribute will now also be considered an absolute path on
-  Windows systems, if it starts with a \ and no drive specifier.
- 
-* The fullpath attribute of <zipfileset> has been ignored if you used
-  the src attribute at the same time.
-
-* The manifest file is now always placed as the second entry (after /META-INF)
-  in generated jars. This allows the manifest to be read by JarInputStreams
-  
-* Fixed bug in depend task which would fail with a NullPointerException if no
-  dependency cache was specified.
-  
-* sql task now handles REM statements correctly so that lines starying with rem
-  but which are not comments are actually processed.
-  
-* XMLLogger now uses the task's name rather than the classname
-  
-* <mapper>s will now work as expected if the to pattern expands to an
-  absolute pathname.
-
-* <javac> didn't ignore memory settings in non-fork mode
-
-* <cab> didn't split the options attribute into several command line
-  arguments correctly.
-
-Other changes:
---------------
-
-* New source attribute for <javac> to enable assertion in JDK 1.4
-
-* XmlLogger and <antstructure> now add an encoding declaration to the
-  XML files they generate.
-
-* <fileset> has a new attribute "casesensitive" to make it match
-  filenames in a case insensitive way (if you set it to false) - by
-  default filesets remain case sensitive.
-
-Changes from Ant 1.3 to Ant 1.4
-===========================================
-
-Changes that could break older environments:
---------------------------------------------
-* JUnitReport now uses the xalan redirect extension for multi-output.
-  With Xalan 1.2.2 it forces the use of bsf.jar in the classpath.
-  (Available in the xalan distribution). It is recommended to switch
-  to Xalan 2.x that do not need it.
-
-* Zip.setWhenempty() has changed its signature.
-
-* <rmic> is now implemented using a factory. This makes extending
-  rmic to use a new compiler a lot easier but may break custom
-  versions of this task that rely on the old implementation.
-
-* several Zip methods have changed their signature as we now use a Zip
-  package of our own that handles Unix permissions for directories.
-  Furthermore <zip> 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 new
-  encoding attribute of the task and set it to UTF8 to get the old
-  behavior.
-
-* The <pvcs> task has been moved to a package of its own.
-
-* JUnitResultFormater has two additional methods that must be
-  implemented by custom formatters.
-
-* Ant will no longer use the canonical version of a path internally -
-  this may yield different results on filesystems that support
-  symbolic links.
-
-* The output generated by the xml formatter for <junit> has changed
-  again, it doesn't format the numeric value in the time attribute anymore.
-
-* Pattern matching rules have changes slightly, the pattern foo*
-  doesn't match files contained in a directory named foo - use foo/*
-  instead.
-
-* <fixcrlf> will not remove trailing whitespace at the end of lines anymore.
-
-* The Classloader usage has been changed for the taskdef, property, available 
-  and sql tasks so that it delegates to the parent classloader. This may cause 
-  ClassNotFoundExceptions to be thrown if a system class attempts to load a
-  class in the taskdef's classpath (typically factory objects).
-
-* Ant now allows multithreading of tasks and the containment of tasks within
-  other tasks. This can break customer listeners which do not expect messages
-  from a task before the previous task has finished. 
-  
-* Ant now installs its own ouput stream into System.out to route output to the
-  task currently executing on the current thread. This also means that all 
-  output is now routed as Ant message events. Customer listeners and loggers 
-  should not call System.out at any time. This has always been true but such 
-  usage now will cause problems due to possible recursion.
-
-* Invalid manifest files will now cause build failures in the <jar> task.
-
-* Ant Introspection now looks for methods with method names starting with
-  addConfigured. When called these methods are passed an argument after it has 
-  been configured from the build file. Custom tasks supporting nested elements 
-  starting with the name configured will no longer function.  
-
-* The environment variable JAVACMD that can be used to specify the
-  java executable to Ant's wrapper scripts must not contain additional
-  command line parameters any longer - please use the environment
-  variable ANT_OPTS for such parameters now.
-  
-* Ant's wrapper scripts now quote the CLASSPATH environment variable, thus
-  supporting classpaths which refer to directories containing spaces. This means
-  that the CLASSPATH environment variable cannot have quotes. Any quotes should
-  be removed. This will not affect the operation of the CLASSPATH environment
-  variable in other contexts.
-
-* A delete task like
-  <delete includeEmptyFilesets="true">
-    <fileset dir="somedir" />
-  </delete>
-  will now remove "somedir" as well, unless there are still files left
-  in it (matched by the default excludes).
-  
-* The copy task will now fail if the file to be copied is not found. 
-
-* Ant properties defined in properties files now behave the same way as 
-  properties defined in the build file. In particular the $ character needs
-  to be escaped in property values by doubling it to $$. So, to define a 
-  property with the value $hello, you need to define it in a properties file
-  as
-    test.prop=$$hello
-  This was not the case in Ant 1.3
-
-Other changes:
---------------
-
-* New tasks: ear, p4counter, record, cvspass, vsscheckin, vsscheckout,
-  typedef, sleep, mimemail, set of tasks for Continuus/Synergy, dependset,
-  condition, maudit, mmetrics, jpcoverage, jpcovreport, jpcovmerge
-
-* Ant now uses JAXP 1.1
-
-* rmic now supports Kaffe's and Weblogic's version of rmic.
-
-* new magic property build.rmic to chose the rmic implementation
-
-* <tar> will now add empty directories as well
-
-* you can now specify a description for <p4change>
-
-* <touch> can now work on <fileset>s
-
-* <uptodate> now supports a value attribute
-
-* <fail> supports nested text
-
-* <fixcrlf> won't override files that are already in the correct
-   format.
-
-* <sql> now supports REM comments as well as // and --
-
-* <jar> now has a nested <metainf> element following the same idea as
-  <war>'s <webinf>.
-
-* <pvcs> can now handle multiple projects.
-
-* <available> now has a "type" attribute you can use in conjunction
-  with the "file" attribute to specify whether the "file" you're
-  looking for is a file or a directory.
-
-* New <junit> formatter named "brief"
-
-* <ejbjar> changes
-  * Add support for Borland Application Server to the <ejbjar> task using
-    a <borland> nested element.
-  * Add support for iPlanet Application Server to the <ejbjar> task. Also 
-    includes some iPlanet utility tasks
-  * Add support for JBoss Application Server to the <ejbjar> task. 
-  * Add a naming attribute to control the naming scheme that
-    ejbjar uses to name the generated EJB jars.
-  * Weblogic element now sets the compiler class for EJB 2.0 beans
-  * <dtd> elements can be specified at the <ejbjar> level for building generic
-    beans
-  * <dtd> elements can now be URLs
-  * Allow the manifest to be specified for the generated jars
-  * The weblogic element now supprts an attribte noEJBC to skip the processing
-    of the jar by ejbc. The ejbc step will then occur at deployment
-  * weblogic will tell ejbc to use Jikes compiler if build.compiler is set to 
-    jikes. It can be restored to the default, javac, operation if desired.  
-  
-* Allow the <sql> Delimiter to be set in the so that Oracle stored procs may be
-  entered  
-
-* <execon> and <apply> can now optionally skip empty filesets.
-
-* <javadoc> has a new useexternalfile attribute that makes it use a
-  temporary file for sourcefile and package names - helps to defeat
-  command line length limitations.
-
-* Data types like <path> can now be defined inside of <target>s
-
-* you can now specify a classpath for <style> - the XSLZ processor
-  will be loaded from this path
-
-* added a force attribute to <style> to support dependencies that the
-  task cannot determine itself (dependency on parameters, not file
-  modification times for example)
-
-* added vmlauncher attribute to exec tasks. This defaults to true. If
-  it is set to false, the VM's ability to launch commands in bypassed
-  and the OS shell, either directly or through the auxillary antRun 
-  scripts is used. 
-
-* regexp mapper now supports the java.util.regex package of JDK 1.4.
-
-* New filesonly attribute for <zip> and friends to suppress directory
-  entries.
-
-* New update attribute for <zip> and friends - update an existing
-  archive instead of creating a new one.
-
-* <apply> and <execon> have been merged into a single task.
-
-* added vssver.scc to the default excludes
-
-* <available> has a new filepath attribute/nested element that allows
-  you top search for a file in a given path.
-
-* <junit> can now optionally set a property on test failure.
-
-* <taskdef> can now define several tasks at once, reading the 
-  name/classname pairs from a property file or resource.
-
-* <unzip/unjar/unwar> and <untar> now have an overwrite attribute that
-  defaults to true.  If set to false, files that are newer than the
-  files in the archive will not be replaced.
-
-* <patternset> and <fileset> now support nested <in/excludesfile>
-  elements - using these you can have more than one in/excludes file
-  per <patternset>. 
-
-* Three new supported compilers for javac: kjc for kopi, gcj for the
-  gcc frontend and sj for Symantec's compiler. 
-  In addition extJavac or the new fork attribute can be
-  used to run the JDK's javac in a JVM separate from Ant.
-
-* <fixrlf> can now with CR only line-ends and can use an arbitraty
-  between 2 and 80.
-
-* The .NET tasks have been adapted to the beta2 release of the framework.
-
-* <move> will now try to rename() files before copying them byte by
-  byte - only if filtering is of, of course.
-  
-* <ant> and <antcall> tasks now support a new attribute inheritAll. When set to
-  false, only user properties are passed through to the target Ant instance.
-  This includes properties set on the command line and properties explicitly
-  passed
-  
-* <javadoc> now skips off line links if the package list cannot be found.
-
-* <wlrun> now allows the security policy file to exist outside the weblogic
-  directory.
-  
-* <java> task will set the Thread contextClassLoader under JDKs 1.2+ to the
-  classloader for the class being executed.
-  
-* Introduce the concept of a TaskContainer - a task or element which can contain
-  Ant Tasks. 
-  
-* Add new tasks implementing the TaskContainer interface <parallel> and
-  <sequential> which allow parallel execution of tasks to be specified.
-
-* <depend> task will now take into account dependencies on jar files and class
-  files from a given classpath.
-  
-* <jar> manifest entries may now be specified in the build file either 
-  completely or to be merged with a manifest file.
-
-* <tstamp> task custom formats now support locales. 
-
-* Added a listner which will forward events to Log4J. The log4j configuration 
-  file should be in the directory from which Ant is run or passed as a system
-  property using a JVM argument.
-
-* Introduced the concept of <filtersets> to allow for more control in which 
-  filters get applied in a <copy> or <move> operation.       
-
-* Added nowarn attribute to javac and deprecated the Jikes-magic property
-  build.compiler.warnings.
-  
-* The <depend> task cache format has changed and all dependency information is
-  now stored in a single file.
-
-Fixed bugs:
------------
-
-* Testcases have been made independent of current working directory.
-
-* Input ZIP-Files will be closed when using a <zipfileset>.
-
-* p4 tasks now don't fail if user, port or client have been omitted
-  (and this is acceptable for the context of the command).
-
-* <javah>'s outputfile attribute will be resolved as relative to the
-  projects basedir.
-
-* <antstructure> should create a valid DTD for propertyfile.operation.entry 
-  and omit tasks it fails to load.
-
-* won't try to pass a -bootclasspath flag to javac 1.1 anymore
-
-* <style>'s style attribute no handles absolute paths correctly.
-
-* <delete includeemptydirs="true"> now deletes more than just the leaf
-  directories.
-
-* You can now specify a <fileset> for a directory that doesn't exist at
-  declaration time but will created before the fileset gets used for the
-  first time.
-
-* If the quiet attribute has been set, <delete> will handle <fileset>s
-  with non-existing directories gracefully.
-
-* Output written by testcases will now be captured by the <junit> task
-  and passed to the formatters.
-  
-* Quote the -group parameter to Javadoc as per the specification
-
-* Initialise classes when loaded through the AntClassLoader - that is, run
-  static initializers
-  
-* Implement getResource() and getResources() in AntClassLoader
-
-* Create the <ejbjar> weblogic command line as a set of arguments rather than
-  as a single line. Avoids problems with paths which contain spaces.
-  
-* <ejbjar> now fails when the weblogic ejbc compiler reports an error.
-  
-* Make the AntClassLoader load resources in the same order as it currently
-  loads classes. 
-  
-* Handle classpaths with spaces
-
-* Make sure XSLT processors close their output files in <style>.  
-
-* perform proper uptodate check in <rmic> when compiling for IIOP.
-
-* <jjtree>'s uptodate test works even if outputdirectory is not the
-  parent dir of target
-
-* <copy> will remove target file (if it exists) before writing to it -
-  this avoids problems with links on filesystems that support them.
-
-* <ftp> now properly recurses remote directories.
-
-* <ftp> closes remote connection when it's done.
-
-* <junit> tries to include all necessary classes for the task itself
-  to the classpath when running in fork mode - doesn't work for JDK 1.1
-
-* <apply> and <execon> do now execute the command only once, if you
-  specify the parallel attribute - instead of once per fileset.
-
-* directory based tasks and fileset could miss some included files in
-  directories that have been excluded
-
-* <fixcrlf> failed for large files.
-
-* <move> removed files you tried to move to themselves.
-
-* <sql> task will not trty to print the result set unless the query succeeded.
-
-* Ant classloader will now ignore paths which are invalid relative to the
-  project base
-  
-* <ejbjar> weblogic elements check for jar file changes has been fixed.
-  Previously some changes would not be included.
-
-* properties loaded from properties files are now resolved internally. This
-  removes the spurious warnings about usage of properties which have not been
-  set.
-  
-* <jar> task and friends now process the JAR manifest to ensure it is valid.
-
-* The task finished event now includes any exception thrown by the task.
-
-* <java> task now supports a jvmVersion attribute so that if another JVM is
-  being used, Ant can determine which options to use for features such as the 
-  VM memory limits 
-
-  
-Changes from Ant 1.2 to Ant 1.3
-===========================================
-
-Changes that could break older environments:
---------------------------------------------
-
-* Ant doesn't search for the buildfile anymore, unless you use the new
-  -find argument.
-
-* <perforce> has been replaced by a number of new tasks.
-
-* <javac> is now implemented using a factory. This makes extending
-  javac to use a new compiler a lot easier but may break custom
-  versions of this task that rely on the old implementation.
-
-* The output generated by the xml formatter for <junit> has changed a
-  little, it doesn't append " sec" in the time attribute anymore.
-
-Other changes:
---------------
-
-* A GUI Frontend: Antidote. This is currently in development. At this
-  time, this is not part of the Ant release, although the source is
-  included if you are interested.
-
-* New tasks: stylebook, propertyfile, depend, antlr, telnet, csc,
-  ilasm, apply, javah, several clearcase tasks, junitreport, sound
-
-* Added output attribute to <java>.
-
-* Added nested zipfileset element to <zip>
-
-* Changed <sql> so that printing is at the task level rather than 
-  the statement level.
-  
-* javadoc task will pass -d flag to any doclet if the destDir attribute is
-  given. If the doclet does not accept the -d flag then omit the destdir
-  attribute.
-
-* <cab> can work on non-Windows platforms with the help of libcabinet. 
-  See http://trill.cis.fordham.edu/~barbacha/cabinet_library/.
-
-* <ftp> now supports passive mode.
-
-* New <mapper> data type that can be used to get influence on the
-  target files for some tasks like <copy> or enable new types of tasks
-  like <apply>.
-
-* <execon> provides more control over the command line now, the names
-  of the source files are no longer required to be at the end of the
-  command.
-
-* Style tasks will now support TraX compliant XSL processors if one is present
-  in your classpath.  
-
-* Added a failonerror to the javac task. If set to false, the build will 
-  continue even if there are compilation errors.
-  
-* Added nested format elements to the tstamp task allowing additional time 
-  formats to be defined for arbitrary properties.   
-
-* Added classpath attribute and nested classpath element to <property>
-  to make the resource attribute more powerful.
-
-* ${} property expansion will now be performed on the patterns read
-  from files specified as includesfile or excludesfile attributes.
-  
-* The <tar> and <untar> tasks now support GNU format for handling paths
-  which are greater than 100 characters in length. In addition the <tar>
-  task now supports nested filesets through which the file permissions
-  may be controlled.
-
-* wlrun, wlstop and ejbjar now support Weblogic 6.0
-
-* The MPasre task has been updated to work with MParse 2.0
-
-* The documentation has been significantly updated.
-
-
-Fixed bugs:
------------
-
-* <signjar> doesn't use deprectated methods anymore.
-
-* javadoc's failonerror attribute works again
-
-* javadoc's additionalparam attribute will now be split into separate
-  parameters (on spaces) to allow for more than one parameter.
-
-* Changed <sql> task so that printing result sets works on Oracle
-
-* Changes to ddcreator and ejbc helper to respect the descriptor hierarchy
-  keppgenerated in ejbc can now be turned off
-  
-* ejbjar now correctly ignores <ejb-ref> elements in the deployment descriptor.
-  CMP files are included by parsing the weblogic deployment descriptor rather 
-  than relying on the naming convention used in ant 1.2
-  
-* ejbjar includes super classes and super interfaces into the generated ejb 
-  jar files. The <support> nested element allows support classes to be 
-  included in the EJB jar. The toplink element should now correctly locate
-  the toplink descriptor.
-  
-* <vssget> now correctly deals with spaces in arguments
-
-* <jar> fails early if a given manifest file doesn't exist
-
-* <rmic> doesn't search for the _Skel file anymore when stubversion is
-  set to 1.2.
-
-* <rmic> uses the the same classpath to verify a class can be rmic'd
-  as it passes to the compiler. 
-
-* org.apache.tools.mail.MailMessage (and therefore <mail>) can now
-  handle SMTP servers sending multi line responses.
-
-* nested <classpath> elements of <taskdef> now work for <taskdef>s not
-  nested into <target> as well.
-
-* <property> and <available> will search for the resource "foo" instead
-  of "/org/apache/tools/ant/taskdefs/foo" when given a relative resource
-  name foo.
-  
-* Handle build files in directories whose name contained a "#" character
-
-* <junit> can now log to files whose name contains a comma as well. 
-
-* The AntClassLoader now refers to the loader which loaded it, any 
-  requests it does not handle itself. Previously these went to the 
-  primordial loader.
-
-Changes from Ant 1.1 to Ant 1.2
-===============================
-
-Changes that could break older environments:
---------------------------------------------
-
-* Semantics of <property> has changed again in the hope to be more
-intuitive. ${} expansion now happens at runtime and <property> tags
-living inside of targets only take effect if they are visited at
-runtime.
-
-As a side effect of this change, task's attributes get set at runtime
-not at parser time as well, which might change the results of
-<script>s or other custom tasks that reference other tasks by their id
-attribute.
-
-* copying of support files in <javac> has been removed - as well as
-the filtering attribute.
-
-* the <expand> and <keysubst> tasks have been removed.
-
-* the ignore and items attributes of directory based tasks have been removed.
-
-* the command line switches _not_ starting with - have been removed.
-
-* Path and EnumeratedAttribute have been moved from
-org.apache.tools.ant to org.apache.tools.ant.types.
-
-* the class attributes of <available>, <java>, <rmic> and <taskdef>
-have been removed.
-
-* the src attribute of <chmod> has been removed.
-
-* <patch> and <javadoc> have lost some of their attributes.
-
-* <java> and <cvs> have lost some undocumented attributes.
-
-* the Unix antRun script would search for command.sh in the directory
-it changed to and invoke this instead of command if present. This
-behavior has been dropped.
-
-* <ejbjar> task syntax has been changed significantly
-
-* <exec> is no longer implemented by org.apache.tool.ant.taskdefs.Exec. 
-Custom tasks that rely on Project.createTask("exec") to return an
-instance of this class are going to fail.
-
-* nested <include> and <exclude> elements expect the value of their
-name attribute to be a single pattern, they don't accept multiple
-patterns anymore. Split them into multiple elements of the same type.
-
-* <delete dir="somedir" /> will now delete the directory itself as
-well as all included files. If you just want to clean out the
-directory and keep the empty one, use a nested fileset.
-
-Other changes:
---------------
-
-* New tasks: antstructure, cab, execon, fail, ftp, genkey, jlink,
-junit, sql, javacc, jjtree, starteam, war, unwar, uptodate,
-native2ascii, copy, move, mparse.
-
-* copydir, copyfile, deltree and rename are now deprecated. They
-should be replaced with the new copy, delete and move tasks.
-
-* <java> uses a ClassLoader of its own in no-fork mode if a classpath is
-specified.
-
-* <style> will create the necessary target directories and reprocess
-all files if the stylesheet changes.
-
-* New data types fileset and patternset - expected to get a broader use.
-They, as well as PATH like structures, can now be defined on a global
-level and later be referenced by their id attribute.
-
-* You can specify environment variables to <exec>.
-
-* <get> can check whether a remote file is actually newer than a local
-copy before it starts a download (HTTP only).
-
-* Added a -logger option to allow the class which performs logging to be 
-specified on the command line.
-
-* Added a -emacs option to tell the logger to leave out taskname adornments
-on log output.
-
-* <chmod> works on all files in parallel and supports multiple filesets.
-
-* <replace> can now use tokens and/or values that cross line boundaries.
-
-* build.compiler supports now jvc as well.
-
-* project specific help can now be obtained with the -projecthelp option.
-
-* Added a -debug option to make -verbose less verbose (and more useful)
-
-* Ant will now search for a file named build.xml in the parent directory
-and above (towards the root of the filesystem) if you didn't specify
--buildfile and there is no build.xml in the current directory.
-
-* <echo> can now write to a file and accepts nested text.
-
-Fixed bugs:
------------
-
-* <chmod> didn't work when used as a directory based task.
-
-* Path, Available, Property didn't resolve relative filenames with
-respect to the Project's basedir.
-
-* Project didn't interpret the basedir attribute correctly in all
-cases.
-
-* Nested <src> in <javac> caused NullPointerException.
-
-* Corrupt Zip- and Jar-files ar now deleted if the task fails.
-
-* many more fixes we've forgotten to document here ...
-
-* The packagelistloc attribute of <javadoc>'s <link> child will be
-  resolved as a file (i.e. it is either absolute or relative to 
-  basedir).
diff --git a/ant.properties.sample b/ant.properties.sample
deleted file mode 100644
index 5be65b5..0000000
--- a/ant.properties.sample
+++ /dev/null
@@ -1,14 +0,0 @@
-# This file is a sample .ant.properties file used for building ant.
-# Modify it for your own needs and copy it to .ant.properties 
-#
-# <-- starts a comment
-
-# If you wanted to use the better than average jikes compiler uncomment next line
-# build.compiler=jikes
-# build.compiler.warnings=true
-# build.compiler.pedantic=true
-# build.compiler.depend=true
-
-# If you want to use non-standard jars then edit following lines
-# jar.junit=/path/to/my/junit.jar
-
diff --git a/bootstrap.bat b/bootstrap.bat
deleted file mode 100755
index c941e1d..0000000
--- a/bootstrap.bat
+++ /dev/null
@@ -1,124 +0,0 @@
-@echo off
-
-REM You will need to specify JAVA_HOME if compiling with 1.2 or later.
-
-REM    Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
-REM    reserved.
-
-set OLDJAVA=%JAVA%
-set OLDJAVAC=%JAVAC%
-set BOOTOLDCLASSPATH=%CLASSPATH%
-set OLDANTHOME=%ANT_HOME%
-
-set ANT_HOME=.
-
-if "" == "%JAVA%"  if "" == "%JAVA_HOME%" set JAVA=java
-if "" == "%JAVA%"                         set JAVA=%JAVA_HOME%\bin\java
-
-if "" == "%JAVAC%" if "" == "%JAVA_HOME%" set JAVAC=javac
-if "" == "%JAVAC%"                        set JAVAC=%JAVA_HOME%\bin\javac
-
-echo.
-echo ... Bootstrapping Ant Distribution
-
-if     "%OS%" == "Windows_NT" if exist bootstrap\nul rmdir/s/q bootstrap
-if not "%OS%" == "Windows_NT" if exist bootstrap\nul deltree/y bootstrap
-if     "%OS%" == "Windows_NT" if exist build\nul rmdir/s/q build
-if not "%OS%" == "Windows_NT" if exist build\nul deltree/y build
-
-SET LOCALCLASSPATH=lib\crimson.jar
-for %%i in (lib\optional\*.jar) do call src\script\lcp.bat %%i
-if exist "%JAVA_HOME%\lib\tools.jar" call src\script\lcp.bat %JAVA_HOME%\lib\tools.jar
-if exist "%JAVA_HOME%\lib\classes.zip" call src\script\lcp.bat %JAVA_HOME%\lib\classes.zip
-
-set TOOLS=src\main\org\apache\tools
-set CLASSDIR=build\classes
-
-SET CLASSPATH=%LOCALCLASSPATH%;%CLASSDIR%;src\main;%CLASSPATH%
-
-echo JAVA_HOME=%JAVA_HOME%
-echo JAVA=%JAVA%
-echo JAVAC=%JAVAC%
-echo CLASSPATH=%CLASSPATH%
-
-if     "%OS%" == "Windows_NT" if exist %CLASSDIR%\nul rmdir/s/q %CLASSDIR%
-if not "%OS%" == "Windows_NT" if exist %CLASSDIR%\nul deltree/y %CLASSDIR%
-
-if not exist build\nul mkdir build
-if not exist build\classes\nul mkdir build\classes
-
-echo.
-echo ... Compiling Ant Classes
-
-"%JAVAC%" -d %CLASSDIR% %TOOLS%\bzip2\*.java %TOOLS%\tar\*.java %TOOLS%\zip\*.java %TOOLS%\ant\*.java %TOOLS%\ant\types\*.java %TOOLS%\ant\taskdefs\*.java %TOOLS%\ant\util\*.java %TOOLS%\ant\util\regexp\RegexpMatcher.java %TOOLS%\ant\util\regexp\RegexpMatcherFactory.java %TOOLS%\ant\taskdefs\condition\*.java %TOOLS%\ant\taskdefs\compilers\*.java 
-
-echo.
-echo ... Copying Required Files
-
-copy %TOOLS%\ant\taskdefs\*.properties %CLASSDIR%\org\apache\tools\ant\taskdefs
-copy %TOOLS%\ant\types\*.properties %CLASSDIR%\org\apache\tools\ant\types
-
-echo.
-echo ... Building Ant Distribution
-
-if not "%OS%"=="Windows_NT" goto win9xStart
-:winNTStart
-@setlocal
-
-REM parse command line arguments
-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.
-
-"%JAVA%" %ANT_OPTS% org.apache.tools.ant.Main -emacs %ANT_CMD_LINE_ARGS% bootstrap
-
-set ANT_CMD_LINE_ARGS=
-if not "%OS%"=="Windows_NT" goto mainEnd
-:winNTend
-@endlocal
-
-:mainEnd
-
-echo.
-echo ... Cleaning Up Build Directories
-
-if     "%OS%" == "Windows_NT" if exist %CLASSDIR%\nul rmdir/s/q %CLASSDIR%
-if not "%OS%" == "Windows_NT" if exist %CLASSDIR%\nul deltree/y %CLASSDIR%
-
-echo.
-echo ... Done Bootstrapping Ant Distribution
-
-set JAVA=%OLDJAVA%
-set JAVAC=%OLDJAVAC%
-set CLASSPATH=%BOOTOLDCLASSPATH%
-set ANT_HOME=%OLDANTHOME%
-set OLDJAVA=
-set OLDJAVAC=
-set BOOTOLDCLASSPATH=
-set LOCALCLASSPATH=
-set OLDANTHOME=
-set TOOLS=
-
diff --git a/bootstrap.sh b/bootstrap.sh
deleted file mode 100755
index da839d6..0000000
--- a/bootstrap.sh
+++ /dev/null
@@ -1,149 +0,0 @@
-#!/bin/sh
-
-#   Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
-#   reserved.
-
-# OS specific support.  $var _must_ be set to either true or false.
-cygwin=false;
-case "`uname`" in
-  CYGWIN*) cygwin=true ;;
-esac
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-  [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
-fi
-
-# You will need to specify JAVA_HOME if compiling with 1.2 or later.
-
-if [ -n "$JAVA_HOME" ] ; then
-  if [ -f "$JAVA_HOME/lib/tools.jar" ] ; then
-    CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar
-  fi
-
-  if [ -f "$JAVA_HOME/lib/classes.zip" ] ; then
-    CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/classes.zip
-  fi
-else
-  echo "Warning: JAVA_HOME environment variable 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
-
-# IBM's JDK on AIX uses strange locations for the executables:
-# JAVA_HOME/jre/sh for java and rmid
-# JAVA_HOME/sh for javac and rmic
-if [ -z "$JAVAC" ] ; then
-  if [ -n "$JAVA_HOME"  ] ; then
-    if [ -x "$JAVA_HOME/sh/javac" ] ; then
-      JAVAC=${JAVA_HOME}/sh/javac;
-    else
-      JAVAC=${JAVA_HOME}/bin/javac;
-    fi
-  else
-    JAVAC=javac
-  fi
-fi
-if [ -z "$JAVACMD" ] ; then
-  if [ -n "$JAVA_HOME"  ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-      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
-fi
-
-ANT_HOME=.
-export ANT_HOME
-
-echo ... Bootstrapping Ant Distribution
-
-if [ -d "bootstrap" ] ; then
-  rm -r bootstrap
-fi
-
-if [ -d "build" ] ; then
-  rm -r build
-fi
-
-CLASSPATH=lib/crimson.jar:${CLASSPATH}
-
-DIRLIBS=lib/optional/*.jar
-for i in ${DIRLIBS}
-do
-    # if the directory is empty, then it will return the input string
-    # this is stupid, so case for it
-    if [ "$i" != "${DIRLIBS}" ] ; then
-        CLASSPATH=$CLASSPATH:"$i"
-    fi
-done
-
-TOOLS=src/main/org/apache/tools
-CLASSDIR=build/classes
-
-CLASSPATH=${CLASSDIR}:src/main:${CLASSPATH}
-
-# For Cygwin, switch to Windows format before running java
-if $cygwin; then
-  CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-fi
-
-export CLASSPATH
-
-mkdir -p build
-mkdir -p ${CLASSDIR}
-mkdir -p bin
-
-echo ... Compiling Ant Classes
-
-"${JAVAC}" -d ${CLASSDIR} ${TOOLS}/bzip2/*.java ${TOOLS}/tar/*.java ${TOOLS}/zip/*.java \
-    ${TOOLS}/ant/util/regexp/RegexpMatcher.java \
-    ${TOOLS}/ant/util/regexp/RegexpMatcherFactory.java \
-    ${TOOLS}/ant/util/*.java ${TOOLS}/ant/types/*.java \
-    ${TOOLS}/ant/*.java ${TOOLS}/ant/taskdefs/*.java \
-    ${TOOLS}/ant/taskdefs/compilers/*.java \
-    ${TOOLS}/ant/taskdefs/condition/*.java
-ret=$?
-if [ $ret != 0 ]; then  
-  echo ... Failed compiling Ant classes !
-  exit $ret
-fi
-
-echo ... Copying Required Files
-
-cp src/main/org/apache/tools/ant/taskdefs/defaults.properties \
-    ${CLASSDIR}/org/apache/tools/ant/taskdefs
-cp src/main/org/apache/tools/ant/types/defaults.properties \
-    ${CLASSDIR}/org/apache/tools/ant/types
-cp src/script/antRun bin
-chmod +x bin/antRun
-
-echo ... Building Ant Distribution
-
-"${JAVACMD}" -classpath "${CLASSPATH}" -Dant.home=. org.apache.tools.ant.Main -emacs "$@" bootstrap
-ret=$?
-if [ $ret != 0 ]; then  
-  echo ... Failed Building Ant Distribution !
-  exit $ret
-fi
-
-
-echo ... Cleaning Up Build Directories
-
-rm -rf ${CLASSDIR}
-rm -rf bin
-
-echo ... Done Bootstrapping Ant Distribution
diff --git a/build.bat b/build.bat
deleted file mode 100755
index e8152d5..0000000
--- a/build.bat
+++ /dev/null
@@ -1,33 +0,0 @@
-@echo off
-
-REM   Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
-REM   reserved.
-
-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/build.sh b/build.sh
deleted file mode 100755
index 7d4651d..0000000
--- a/build.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/sh
-
-#   Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-#   reserved.
-
-cygwin=false;
-case "`uname`" in
-  CYGWIN*) cygwin=true ;;
-esac
-
-REALANTHOME=$ANT_HOME
-ANT_HOME=bootstrap
-export ANT_HOME
-
-if test ! -f bootstrap/lib/ant.jar -o  ! -x bootstrap/bin/ant -o ! -x bootstrap/bin/antRun ; then
-  /bin/sh ./bootstrap.sh
-fi    
-
-if test ! -f bootstrap/lib/ant.jar -o  ! -x bootstrap/bin/ant -o ! -x bootstrap/bin/antRun ; then
-  echo Bootstrap FAILED
-  exit
-fi
-
-LOCALCLASSPATH=lib/crimson.jar
-# add in the dependency .jar files
-DIRLIBS=lib/optional/*.jar
-for i in ${DIRLIBS}
-do
-    if [ "$i" != "${DIRLIBS}" ] ; then
-        LOCALCLASSPATH=$LOCALCLASSPATH:"$i"
-    fi
-done
-
-# make sure the classpath is in unix format
-if $cygwin ; then
-    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`    
-fi
-
-CLASSPATH=$LOCALCLASSPATH:$CLASSPATH
-
-# switch back to Windows format
-if $cygwin ; then
-    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`    
-fi
-
-export CLASSPATH
-
-
-if [ "$REALANTHOME" != "" ] ; then
-  ANT_INSTALL="-Dant.install=$REALANTHOME"
-fi
-
-bootstrap/bin/ant -emacs $ANT_INSTALL $*
-
diff --git a/build.xml b/build.xml
deleted file mode 100644
index 9d95e66..0000000
--- a/build.xml
+++ /dev/null
@@ -1,1250 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-  =======================================================================
-    Apache Ant own build file
-
-   Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
-   reserved.
-
-  =======================================================================
--->
-<project default="main" basedir=".">
-
-  <!-- Give user a chance to override without editing this file
-       (and without typing -D each time it compiles it) -->
-  <property file=".ant.properties" />
-  <property file="${user.home}/.ant.properties" />
-
-  <property name="Name" value="Apache Ant"/>
-  <property name="name" value="ant"/>
-  <property name="version" value="1.5alpha"/>
-
-  <property name="debug" value="true" />
-  <property name="chmod.fail" value="true" />
-  <property name="deprecation" value="false" />
-  <property name="optimize" value="true" />
-  <property name="junit.fork" value="false" />
-  <property name="junit.filtertrace" value="off"/>
-  <property name="junit.summary" value="no"/>
-  
-  <!--
-       ===================================================================
-         Set the properties related to the source tree
-       ===================================================================
-  -->
-  <property name="src.dir" value="src"/>
-  <property name="java.dir" value="${src.dir}/main"/>
-  <property name="script.dir" value="${src.dir}/script"/>
-  <property name="lib.dir" value="lib"/>
-  <property name="docs.dir" value="docs"/>
-  <property name="etc.dir" value="src/etc"/>
-  <property name="tests.dir" value="src/testcases"/>
-  <property name="tests.etc.dir" value="src/etc/testcases"/>
-
-  <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"/>
-
-  <property name="manifest" value="src/etc/manifest"/>
-
-
-  <!--
-       ===================================================================
-         Set the properties for the build area
-       ===================================================================
-  -->
-  <property name="build.dir" value="build"/>
-  <property name="bootstrap.dir" value="bootstrap"/>
-  <property name="build.classes" value="${build.dir}/classes"/>
-  <property name="build.lib" value="${build.dir}/lib"/>
-  <property name="build.javadocs" value="${build.dir}/javadocs"/>
-  <property name="build.tests" value="${build.dir}/testcases"/>
-
-  <path id="classpath">
-  </path>
-
-  <!-- empty for JDK 1.2+, contains classes.zip otherwise -->
-  <path id="classes.zip">
-    <fileset dir="${java.home}" includes="lib/classes.zip" />
-  </path>
-
-  <path id="tests-classpath">
-    <pathelement location="${build.classes}" />
-    <pathelement location="${build.tests}" />
-    <!--
-        include the test source and test data dirs
-        so that we can pick resources via getResource(AsStream)
-     -->
-    <pathelement location="${tests.dir}"/>
-    <pathelement location="${tests.etc.dir}"/>
-    <path refid="classpath" />
-  </path>
-<!--   turn this path into a string which is passed to the tests -->
-  <property name="tests-classpath.value"
-            refid="tests-classpath"/>
-
- <!--
-       ===================================================================
-         Set up properties for the distribution area
-       ===================================================================
-  -->
-  <property name="dist.name" value="jakarta-${name}-${version}"/>
-  <property name="dist.base" value="distribution"/>
-  <property name="dist.dir" value="dist"/>
-  <property name="dist.bin" value="${dist.dir}/bin"/>
-  <property name="dist.lib" value="${dist.dir}/lib"/>
-  <property name="dist.docs" value="${dist.dir}/docs"/>
-  <property name="dist.etc" value="${dist.dir}/etc"/>
-  <property name="dist.javadocs" value="${dist.dir}/docs/manual/api"/>
-
-  <property name="src.dist.dir" value="dist-src"/>
-  <property name="src.dist.src" value="${src.dist.dir}/src"/>
-  <property name="src.dist.docs" value="${src.dist.dir}/docs"/>
-  <property name="src.dist.lib" value="${src.dist.dir}/lib"/>
-
-  <!--
-       ===================================================================
-         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.type.package}/depend/*.java"
-             unless="jdk1.2+" />
-    <exclude name="${util.package}/depend/*.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"
-             />
-  </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" />
-  </patternset>
-
-  <!-- depends on external libraries -->
-  <patternset id="needs.trax">
-    <exclude name="${optional.package}/TraXLiaison*.java"
-             unless="trax.present" />
-    <exclude name="${optional.package}/junit/XMLResultAggregator.java"
-             unless="trax.present" />
-    <exclude name="${optional.package}/junit/AggregateTransformer.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/XMLResultAggregator.java"
-             unless="xalan2.present" />
-    <exclude name="${optional.package}/junit/AggregateTransformer.java"
-             unless="xalan2.present" />
-    <exclude name="${optional.package}/junit/XalanExecutor.java"
-             unless="xalan2.present" />
-    <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="${optional.type.package}/depend/*.java" 
-             unless="bcel.present" />
-    <exclude name="${util.package}/depend/*.java"
-             unless="bcel.present" />
-    <exclude name="${optional.package}/ejb/EjbJar.java"
-             unless="bcel.present" />
-    <exclude name="${optional.package}/ejb/*DeploymentTool.java"
-             unless="bcel.present" />
-    <exclude name="${optional.package}/ejb/IPlanet*.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>
-
-  <!--
-       ===================================================================
-         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" />
-    <available property="netrexx.present"
-               classname="netrexx.lang.Rexx"
-               classpathref="classpath" />
-    <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"/>
-    <available property="icontract.present"
-               classname="com.reliablesystems.iContract.IContracted"
-               classpathref="classpath"/>
-    <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" />
-    <available property="bcel.present"
-               classname="org.apache.bcel.Constants"
-               classpathref="classpath" />
-    <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="tests.and.ant.share.classloader">
-      <or>
-        <equals arg1="${junit.fork}" arg2="true" />
-        <equals arg1="${build.sysclasspath}" arg2="only" />
-      </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" />
-
-    <property name="build.tests.resolved" location="${build.tests}" />
-    <condition property="tests.are.on.system.classpath">
-      <or>
-        <!-- relative paths in CLASSPATH -->
-        <contains string="${java.class.path}"
-                  substring="${build.tests}" />
-        <!-- absolute paths in CLASSPATH -->
-        <contains string="${java.class.path}"
-                  substring="${build.tests.resolved}" />
-      </or>
-    </condition>
-  </target>
-
-
-  <!--
-       ===================================================================
-         Prepare the build
-       ===================================================================
-  -->
-  <target name="prepare">
-    <tstamp>
-      <format property="year" pattern="yyyy" />
-    </tstamp>
-    <filterset id="ant.filters">
-      <filter token="VERSION" value="${version}" />
-      <filter token="DATE" value="${TODAY}" />
-      <filter token="TIME" value="${TSTAMP}" />
-    </filterset>
-  </target>
-
-  <!--
-       ===================================================================
-         Build the code
-       ===================================================================
-  -->
-  <target name="build"
-          depends="prepare, check_for_optional_packages"
-          description="--> compiles the source code">
-    <mkdir dir="${build.dir}"/>
-    <mkdir dir="${build.classes}"/>
-    <mkdir dir="${build.lib}"/>
-
-    <javac srcdir="${java.dir}"
-           destdir="${build.classes}"
-           debug="${debug}"
-           deprecation="${deprecation}"
-           optimize="${optimize}" >
-      <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" />
-    </javac>
-
-    <copy todir="${build.classes}">
-      <fileset dir="${java.dir}">
-        <include name="**/*.properties" />
-        <include name="**/*.dtd" />
-      </fileset>
-    </copy>
-
-    <copy todir="${build.classes}"
-          overwrite="true">
-      <fileset dir="${java.dir}">
-        <include name="**/version.txt" />
-        <include name="**/defaultManifest.mf" />
-      </fileset>
-      <filterset refid="ant.filters"/>
-    </copy>
-
-    <copy todir="${build.classes}/${optional.package}/junit/xsl">
-       <fileset dir="${etc.dir}">
-         <include name="junit-frames.xsl" />
-         <include name="junit-noframes.xsl" />
-       </fileset>
-    </copy>
-
-  </target>
-
-  <!--
-       ===================================================================
-         Create the Apache Ant jars: ant.jar and optional.jar
-       ===================================================================
-  -->
-  <target name="jars"
-          depends="build"
-          description="--> creates the Apache Ant jars">
-
-    <copy todir="${build.dir}">
-      <fileset dir=".">
-        <include name="LICENSE" />
-        <include name="LICENSE.crimson" />
-      </fileset>
-      <mapper type="glob" from="*" to="*.txt" />
-    </copy>
-
-    <jar destfile="${build.lib}/${name}.jar"
-         basedir="${build.classes}"
-         manifest="${manifest}">
-      <exclude name="${optional.package}/**" />
-      <exclude name="${optional.type.package}/**" />
-      <exclude name="${util.package}/depend/**" />
-      <exclude name="${util.package}/optional/**" />
-      <exclude name="${util.package}/regexp/**" />
-      <exclude name="${ant.package}/listener/Log4jListener.class" />
-      <exclude name="${ant.package}/taskdefs/email/UUMailer.class" />
-      <exclude name="${ant.package}/taskdefs/email/MimeMailer.class" />
-      <exclude name="${ant.package}/taskdefs/Get.class" />
-      <metainf dir="${build.dir}" includes="LICENSE.txt"/>
-
-      <manifest>
-        <section name="${ant.package}">
-          <attribute name="Specification-Title"
-                     value="Apache Ant" />
-          <attribute name="Specification-Version"
-                     value="${version}" />
-          <attribute name="Specification-Vendor"
-                     value="Apache Software Foundation" />
-          <attribute name="Implementation-Title"
-                     value="org.apache.tools.ant" />
-          <attribute name="Implementation-Version"
-                     value="${version} ${TODAY}" />
-          <attribute name="Implementation-Vendor"
-                     value="Apache Software Foundation" />
-        </section>
-      </manifest>
-    </jar>
-
-    <jar destfile="${build.lib}/optional.jar"
-         basedir="${build.classes}"
-         manifest="${manifest}">
-      <include name="${optional.package}/**" />
-      <include name="${optional.type.package}/**" />
-      <include name="${util.package}/depend/**" />
-      <include name="${util.package}/optional/**" />
-      <include name="${util.package}/regexp/**" />
-      <include name="${ant.package}/listener/Log4jListener.class" />
-      <include name="${ant.package}/taskdefs/email/UUMailer.class" />
-      <include name="${ant.package}/taskdefs/email/MimeMailer.class" />
-      <include name="${ant.package}/taskdefs/Get.class" />
-      <metainf dir="${build.dir}" includes="LICENSE.txt"/>
-
-      <manifest>
-        <section name="${optional.package}">
-          <attribute name="Specification-Title"
-                     value="Apache Ant Optional Tasks" />
-          <attribute name="Specification-Version"
-                     value="${version}" />
-          <attribute name="Specification-Vendor"
-                     value="Apache Software Foundation" />
-          <attribute name="Implementation-Title"
-                     value="org.apache.tools.ant.taskdefs.optional" />
-          <attribute name="Implementation-Version"
-                     value="${version} ${TODAY}" />
-          <attribute name="Implementation-Vendor"
-                     value="Apache Software Foundation" />
-        </section>
-      </manifest>
-    </jar>
-
-  </target>
-
-  <!--
-       ===================================================================
-         Create the essential distribution that can run Apache Ant
-       ===================================================================
-  -->
-  <target name="dist-lite"
-          depends="jars"
-          description="--> creates a minimum distribution to run Apache Ant">
-
-    <mkdir dir="${dist.dir}"/>
-    <mkdir dir="${dist.bin}"/>
-    <mkdir dir="${dist.lib}"/>
-
-    <copy todir="${dist.lib}">
-      <fileset dir="${build.lib}"/>
-    </copy>
-
-    <copy todir="${dist.bin}">
-      <fileset dir="${script.dir}/" />
-    </copy>
-
-    <fixcrlf srcdir="${dist.bin}" eol="crlf" includes="*.bat" />
-    <fixcrlf srcdir="${dist.bin}" eol="lf">
-      <include name="ant" />
-      <include name="antRun" />
-      <include name="*.pl" />
-    </fixcrlf>
-
-    <chmod perm="ugo+rx" dir="${dist.dir}" type="dir" includes="**" 
-           failonerror="${chmod.fail}" />
-    <chmod perm="ugo+r" dir="${dist.dir}" type="file" includes="**" 
-           failonerror="${chmod.fail}" />
-    <chmod perm="ugo+x" type="file" failonerror="${chmod.fail}">
-       <fileset dir="${dist.bin}">
-         <include name="**/ant" />
-         <include name="**/antRun" />
-         <include name="**/*.pl" />
-         <include name="**/*.py" />
-       </fileset>
-    </chmod>
-
-  </target>
-
- <!--
-       ===================================================================
-         Create the complete distribution
-       ===================================================================
-  -->
-  <target name="dist" description="--> creates a complete distribution">
-    <antcall inheritAll="false" target="internal_dist">
-      <param name="dist.dir" value="${dist.name}" />
-    </antcall>
-  </target>
-
-  <target name="dist_javadocs" depends="javadocs">
-    <mkdir dir="${dist.javadocs}"/>
-    <copy todir="${dist.javadocs}" overwrite="true">
-      <fileset dir="${build.javadocs}"/>
-    </copy>
-  </target>
-
-
-  <target name="internal_dist" depends="dist-lite,dist_javadocs">
-    <mkdir dir="${dist.docs}"/>
-    <mkdir dir="${dist.etc}"/>
-
-    <copy todir="${dist.lib}">
-      <fileset dir="${lib.dir}">
-        <include name="*.jar" />
-        <include name="*.zip" />
-      </fileset>
-    </copy>
-
-    <copy todir="${dist.lib}" file="${lib.dir}/README"/>
-
-    <copy todir="${dist.docs}">
-      <fileset dir="${docs.dir}">
-        <exclude name="**/images/**"/>
-      </fileset>
-      <filterset refid="ant.filters"/>
-    </copy>
-
-    <copy todir="${dist.docs}" filtering="false">
-      <fileset dir="${docs.dir}">
-        <include name="**/images/**"/>
-      </fileset>
-    </copy>
-
-    <copy todir="${dist.dir}">
-      <fileset dir=".">
-        <include name="README"/>
-        <include name="LICENSE"/>
-        <include name="LICENSE.crimson"/>
-        <include name="TODO"/>
-        <include name="WHATSNEW"/>
-        <include name="KEYS"/>
-      </fileset>
-    </copy>
-
-    <chmod perm="ugo+rx" dir="${dist.dir}" type="dir" includes="**" 
-           failonerror="${chmod.fail}" />
-    <chmod perm="ugo+r" dir="${dist.dir}" type="file" includes="**" 
-           failonerror="${chmod.fail}" />
-    <chmod perm="ugo+x" type="file" failonerror="${chmod.fail}">
-       <fileset dir="${dist.bin}">
-         <include name="**/ant" />
-         <include name="**/antRun" />
-         <include name="**/*.pl" />
-         <include name="**/*.py" />
-       </fileset>
-    </chmod>
-
-    <!-- publish some useful stylesheets -->
-    <copy todir="${dist.etc}">
-        <fileset dir="${etc.dir}">
-            <include name="junit-frames.xsl"/>
-            <include name="junit-noframes.xsl"/>
-            <include name="coverage-frames.xsl"/>
-            <include name="maudit-frames.xsl"/>
-            <include name="mmetrics-frames.xsl"/>
-            <include name="jdepend.xsl"/>
-            <include name="log.xsl"/>
-        </fileset>
-    </copy>
-
-  </target>
-
-
-  <!--
-       ===================================================================
-         Target to create bootstrap build
-       ===================================================================
-  -->
-  <target name="bootstrap" description="--> creates a bootstrap build">
-    <antcall inheritAll="false" target="dist-lite">
-      <param name="dist.dir" value="${bootstrap.dir}" />
-    </antcall>
-  </target>
-
-
-  <!--
-       ===================================================================
-         Create the source distribution
-       ===================================================================
-  -->
-  <target name="src-dist"
-          description="--> creates a source distribution">
-
-    <mkdir dir="${src.dist.dir}" />
-
-    <copy todir="${src.dist.lib}">
-      <fileset dir="${lib.dir}">
-        <include name="*.jar" />
-        <include name="*.zip" />
-        <include name="README"/>
-      </fileset>
-    </copy>
-
-    <copy todir="${src.dist.src}">
-      <fileset dir="${src.dir}"/>
-    </copy>
-
-    <copy todir="${src.dist.docs}">
-      <fileset dir="${docs.dir}">
-        <exclude name="manual/api/**"/>
-      </fileset>
-    </copy>
-
-    <copy todir="${src.dist.dir}">
-      <fileset dir=".">
-        <include name="README"/>
-        <include name="LICENSE"/>
-        <include name="LICENSE.crimson"/>
-        <include name="TODO"/>
-        <include name="WHATSNEW"/>
-        <include name="KEYS"/>
-        <include name="build.bat"/>
-        <include name="build.sh"/>
-        <include name="bootstrap.bat"/>
-        <include name="bootstrap.sh"/>
-        <include name="build.xml"/>
-      </fileset>
-    </copy>
-
-    <fixcrlf srcdir="${src.dist.dir}" eol="crlf" includes="*.bat" />
-    <fixcrlf srcdir="${src.dist.dir}" eol="lf">
-      <include name="**/*.sh" />
-      <include name="**/*.pl" />
-      <include name="**/ant" />
-      <include name="**/antRun" />
-    </fixcrlf>
-    <fixcrlf srcdir="${src.dist.dir}">
-      <include name="**/*.java" />
-    </fixcrlf>
-
-    <chmod perm="ugo+x" dir="${src.dist.dir}" type="dir"
-           failonerror="${chmod.fail}" />
-    <chmod perm="ugo+r" dir="${src.dist.dir}" failonerror="${chmod.fail}" />
-    <chmod perm="ugo+x" failonerror="${chmod.fail}">
-       <fileset dir="${src.dist.dir}">
-         <include name="**/.sh" />
-         <include name="**/.pl" />
-         <include name="**/.py" />
-         <include name="**/ant" />
-         <include name="**/antRun" />
-       </fileset>
-    </chmod>
-
-  </target>
-
-  <!--
-       ===================================================================
-         Create the binary distribution
-       ===================================================================
-  -->
-  <target name="main_distribution"
-          description="--> creates the zip and tar distributions">
-    <delete dir="${dist.name}" />
-    <mkdir dir="${dist.base}"/>
-    <mkdir dir="${dist.base}/src"/>
-    <mkdir dir="${dist.base}/bin"/>
-
-    <antcall inheritAll="false" target="internal_dist">
-      <param name="dist.dir" value="${dist.name}" />
-    </antcall>
-    <zip destfile="${dist.base}/bin/${dist.name}-bin.zip"
-         basedir="${dist.name}/.."
-         includes="${dist.name}/**"/>
-    <tar longfile="gnu"
-         destfile="${dist.base}/bin/${dist.name}-bin.tar">
-      <tarfileset dir="${dist.name}/.." mode="755" username="ant" group="ant">
-        <include name="${dist.name}/bin/ant"/>
-        <include name="${dist.name}/bin/antRun"/>
-        <include name="${dist.name}/bin/*.pl"/>
-        <include name="${dist.name}/bin/*.py"/>
-      </tarfileset>
-      <tarfileset dir="${dist.name}/.." username="ant" group="ant">
-        <include name="${dist.name}/**"/>
-        <exclude name="${dist.name}/bin/ant"/>
-        <exclude name="${dist.name}/bin/antRun"/>
-        <include name="${dist.name}/bin/*.pl"/>
-        <include name="${dist.name}/bin/*.py"/>
-      </tarfileset>
-    </tar>
-    <gzip zipfile="${dist.base}/bin/${dist.name}-bin.tar.gz"
-          src="${dist.base}/bin/${dist.name}-bin.tar"/>
-    <bzip2 zipfile="${dist.base}/bin/${dist.name}-bin.tar.bz2"
-           src="${dist.base}/bin/${dist.name}-bin.tar"/>
-    <delete file="${dist.base}/bin/${dist.name}-bin.tar"/>
-    <delete dir="${dist.name}" />
-    <checksum fileext=".md5">
-      <fileset dir="${dist.base}/bin/" />
-    </checksum>
-
-    <antcall inheritAll="false" target="src-dist">
-      <param name="src.dist.dir" value="${dist.name}" />
-    </antcall>
-    <zip destfile="${dist.base}/src/${dist.name}-src.zip"
-         basedir="${dist.name}/.."
-         includes="${dist.name}/**"/>
-    <tar longfile="gnu"
-         destfile="${dist.base}/src/${dist.name}-src.tar" >
-      <tarfileset dir="${dist.name}/.." mode="755" username="ant" group="ant">
-        <include name="${dist.name}/bootstrap.sh"/>
-        <include name="${dist.name}/build.sh"/>
-      </tarfileset>
-      <tarfileset dir="${dist.name}/.." username="ant" group="ant">
-        <include name="${dist.name}/**"/>
-        <exclude name="${dist.name}/bootstrap.sh"/>
-        <exclude name="${dist.name}/build.sh"/>
-      </tarfileset>
-    </tar>
-    <gzip zipfile="${dist.base}/src/${dist.name}-src.tar.gz"
-          src="${dist.base}/src/${dist.name}-src.tar"/>
-    <bzip2 zipfile="${dist.base}/src/${dist.name}-src.tar.bz2"
-           src="${dist.base}/src/${dist.name}-src.tar"/>
-    <delete file="${dist.base}/src/${dist.name}-src.tar"/>
-    <delete dir="${dist.name}" />
-    <checksum fileext=".md5">
-      <fileset dir="${dist.base}/src/" />
-    </checksum>
-  </target>
-
-  <target name="rpm_check">
-    <available property="rpm.present"
-               file="/bin/rpm"/>
-  </target>
-
-  <target name="rpm" description="Build the RPM files for ant"
-          depends="prepare, rpm_check"
-          if="rpm.present">
-    <tstamp>
-      <format property="rpmyear" pattern="yyyyMMdd"/>
-      <format property="nightlybuild.dir" pattern="yyyy-MM-dd"/>
-    </tstamp>
-    <property name="rpm.release" value="cvs${rpmyear}"/>
-    <property name="rpm.source" value="nightly/${nightlybuild.dir}/"/>
-
-    <mkdir dir="build/rpm/SPECS"/>
-    <mkdir dir="build/rpm/SOURCES"/>
-    <mkdir dir="build/rpm/BUILD"/>
-    <mkdir dir="build/rpm/RPMS"/>
-    <mkdir dir="build/rpm/SRPMS"/>
-
-    <property name="disttar" location="${dist.base}/bin/${dist.name}-bin.tar.gz"/>
-    <copy file="src/etc/ant.spec" tofile="build/rpm/SPECS/ant.spec">
-      <filterset refid="ant.filters"/>
-      <filterset>
-        <filter token="RPM_RELEASE" value="${rpm.release}"/>
-        <filter token="RPM_SOURCE" value="${rpm.source}"/>
-        <filter token="DIST_TAR" value="${disttar}"/>
-      </filterset>
-    </copy>
-    <copy file="src/etc/antsrc.spec" tofile="build/rpm/SPECS/antsrc.spec">
-      <filterset refid="ant.filters"/>
-      <filterset>
-        <filter token="RPM_RELEASE" value="${rpm.release}"/>
-        <filter token="RPM_SOURCE" value="${rpm.source}"/>
-      </filterset>
-    </copy>
-    <rpm topDir="build/rpm"
-         specfile="ant.spec"
-         command="-bb"/>
-
-    <copy file="distribution/src/${dist.name}-src.tar.gz" todir="build/rpm/SOURCES"/>
-    <rpm topDir="build/rpm"
-         specfile="antsrc.spec"
-         command="-bs"/>
-
-    <mkdir dir="${dist.base}/rpms"/>
-    <copy todir="${dist.base}/rpms">
-      <fileset dir="build/rpm/RPMS/noarch"/>
-    </copy>
-    <copy todir="${dist.base}/rpms">
-      <fileset dir="build/rpm/SRPMS"/>
-    </copy>
-  </target>
-
-  <target name="distribution" depends="main_distribution, rpm">
-  </target>
-
-
-  <!--
-       ===================================================================
-         Cleans up build and distribution directories
-       ===================================================================
-  -->
-  <target name="clean"
-          description="--> cleans up build and dist directories">
-    <delete dir="${build.dir}" />
-    <delete dir="${dist.base}" />
-    <delete dir="${dist.dir}" />
-    <delete>
-      <fileset dir="." includes="**/*~" defaultexcludes="no"/>
-    </delete>
-  </target>
-
-  <!--
-       ===================================================================
-         Cleans everything
-       ===================================================================
-  -->
-  <target name="allclean"
-          depends="clean"
-          description="--> cleans up everything">
-    <delete file="${bootstrap.dir}/bin/antRun" />
-    <delete file="${bootstrap.dir}/bin/antRun.bat" />
-    <delete file="${bootstrap.dir}/bin/*.pl" />
-    <delete file="${bootstrap.dir}/bin/*.py" />
-  </target>
-
-  <!--
-       ===================================================================
-         Installs Apache Ant
-       ===================================================================
-  -->
-  <target name="install" if="ant.install">
-    <antcall inheritAll="false" target="internal_dist">
-      <param name="dist.dir" value="${ant.install}" />
-    </antcall>
-  </target>
-
-  <target name="install-lite" if="ant.install">
-    <antcall inheritAll="false" target="dist-lite">
-      <param name="dist.dir" value="${ant.install}" />
-    </antcall>
-  </target>
-
-  <!--
-       ===================================================================
-         Creates the API documentation
-       ===================================================================
-  -->
-  <target name="javadoc_check">
-    <uptodate property="javadoc.notrequired"
-              targetfile="${build.javadocs}/packages.html" >
-        <srcfiles dir= "${java.dir}" includes="**/*.java"/>
-    </uptodate>
-  </target>
-
-  <target name="javadocs" depends="prepare, javadoc_check"
-          unless="javadoc.notrequired"
-          description="--> creates the API documentation">
-    <mkdir dir="${build.javadocs}"/>
-    <javadoc packagenames="org.apache.*"
-             useexternalfile="yes"
-             sourcepath="${java.dir}"
-             destdir="${build.javadocs}"
-             author="true"
-             version="true"
-             windowtitle="${Name} API"
-             doctitle="${Name}">
-      <tag name="todo" description="To do:" scope="all" />
-      <tag name="ant.task" enabled="false" description="Task:" scope="types" />
-      <group title="Apache Ant Core" packages="org.apache.tools.ant*" />
-      <group title="Core Tasks" packages="org.apache.tools.ant.taskdefs*" />
-      <group title="Optional Tasks" packages="org.apache.tools.ant.taskdefs.optional*" />
-
-      <bottom>Copyright &#169; 2000-${year} Apache Software Foundation. All Rights Reserved.</bottom>
-    </javadoc>
-  </target>
-
-  <!--
-       ===================================================================
-         Compile testcases
-       ===================================================================
-  -->
-  <target name="compile-tests" depends="build" if="junit.present">
-    <mkdir dir="${build.tests}"/>
-
-    <javac srcdir="${tests.dir}"
-           destdir="${build.tests}"
-           debug="${debug}"
-           deprecation="${deprecation}" >
-      <classpath refid="tests-classpath" />
-
-      <patternset refid="needs.antlr" />
-
-      <patternset refid="needs.jdk1.2+" />
-      <patternset refid="needs.jdk1.3+" />
-      <patternset refid="needs.jdk1.4+" />
-
-      <patternset refid="needs.jakarta.regexp" />
-      <patternset refid="needs.jakarta.oro" />
-
-      <patternset refid="needs.trax" />
-      <patternset refid="needs.xslp" />
-      <patternset refid="needs.xalan1" />
-    </javac>
-  </target>
-
-  <target name="dump-info" depends="dump-sys-properties,run-which" />
-
-  <target name="dump-sys-properties" unless="which.present" 
-          depends="xml-check">
-    <echo message="java.vm.info=${java.vm.info}" />
-    <echo message="java.vm.name=${java.vm.name}" />
-    <echo message="java.vm.vendor=${java.vm.vendor}" />
-    <echo message="java.vm.version=${java.vm.version}" />
-    <echo message="os.arch=${os.arch}" />
-    <echo message="os.name=${os.name}" />
-    <echo message="os.version=${os.version}" />
-    <echo message="file.encoding=${file.encoding}" />
-    <echo message="user.language=${user.language}" />
-  </target>
-
-  <!-- helper class from Xalan2 to check for jar versioning of xml/xsl processors -->
-  <target name="xml-check" depends="check_for_optional_packages" 
-          if="xalan.envcheck" unless="which.present">
-      <java classname="org.apache.xalan.xslt.EnvironmentCheck"/>
-  </target>
-
-  <target name="run-which" depends="check_for_optional_packages"
-          if="which.present">
-      <java classname="org.apache.env.Which" taskname="which"/>
-  </target>
-
-  <!-- test to see if we are online or not. can take a while when we are off line, so
-    setting the property is a good shortcut-->
-  <target name="probe-offline">
-      <condition property="offline">
-      <or>
-        <isset property="offline"/>
-        <not>
-          <http  url="http://www.apache.org/"/>
-        </not>
-      </or>
-    </condition>
-    <echo level="verbose" > offline=${offline}</echo>
-  </target>
-  
-  <!--
-       ===================================================================
-         Run testcase
-       ===================================================================
-  -->
-  <target name="test" depends="run-tests" description="--> run JUnit tests"/>
-
-  <target name="run-tests" depends="dump-info,compile-tests,probe-offline" if="junit.present">
-
-    <junit printsummary="${junit.summary}" haltonfailure="yes" 
-           filtertrace="${junit.filtertrace}"
-           fork="${junit.fork}">
-<!--      <jvmarg value="-classic"/> -->
-      <classpath refid="tests-classpath"/>
-      <classpath refid="classes.zip" />
-
-      <sysproperty key="ant.home" value="${ant.home}" />
-      <sysproperty key="build.tests" value="${build.tests}"/>
-      <sysproperty key="tests-classpath.value" 
-                   value="${tests-classpath.value}" />
-
-      <formatter type="brief" usefile="false" />
-
-      <batchtest>
-        <fileset dir="${tests.dir}">
-          <include name="**/*Test*" />
-
-          <!-- abstract classes, not testcases -->
-          <exclude name="${ant.package}/taskdefs/TaskdefsTest.java" />
-          <exclude name="${ant.package}/BuildFileTest.java" />
-          <exclude name="${regexp.package}/RegexpMatcherTest.java" />
-          <exclude name="${regexp.package}/RegexpTest.java" />
-          <exclude name="${optional.package}/AbstractXSLTLiaisonTest.java" />
-          
-          <!-- helper classes, not testcases -->
-          <exclude name="org/example/**" />
-          <exclude name="${ant.package}/taskdefs/TaskdefTest*Task.java" />
-
-          <!-- interactive test -->
-          <exclude name="${ant.package}/taskdefs/TestProcess.java" />
-
-          <!-- only run these tests if their required libraries are
-               installed -->
-          <patternset refid="needs.jdk1.2+" />
-          <patternset refid="needs.jdk1.4+" />
-          <patternset refid="needs.jakarta.regexp" />
-          <patternset refid="needs.jakarta.oro" />
-          <patternset refid="needs.vaj" />
-          <patternset refid="needs.antlr" />
-          <patternset refid="needs.xalan1" />
-          <patternset refid="needs.xslp" />
-
-          <!-- tests excluded if the test is run in offline mode -->
-          <patternset refid="onlinetests"/> 
-
-          <!-- runtime dependencies that are different from compile
-               time dependencies -->
-          <exclude name="${optional.package}/ReplaceRegExpTest.java"
-                   unless="some.regexp.support" />
-          <exclude name="${optional.package}/sitraka/*.java"
-                   unless="some.regexp.support" />
-
-          <!-- fail if testcases can be loaded from the system classloader -->
-          <exclude name="${optional.package}/junit/JUnitClassLoaderTest.java"
-                   if="tests.are.on.system.classpath"/>
-          <exclude name="${optional.package}/sitraka/XMLReportTest.java"
-                   if="tests.are.on.system.classpath"/>
-
-          <!-- these tests need to be localised before being ran???? -->
-          <exclude name="${optional.package}/PvcsTest.java" />
-
-          <!-- ehm, this is not really a TraX test but rather a xalan2 test..-->
-          <exclude name="${optional.package}/TraXLiaisonTest.java"
-                   unless="xalan2.present"/>
-
-          <!-- needs BSF to work -->
-          <exclude name="${optional.package}/XalanLiaisonTest.java" 
-                   unless="bsf.present" />
-
-          <!--
-          XXX need to figure out what's causing this InvocationTargetException
-          -->
-          <exclude name="${optional.package}/junit/JUnitTestRunnerTest.java"
-                   unless="jdk1.2+" />
-          <!-- DateTime handling seems to be broken in JDK 1.1 -->
-          <exclude name="${util.package}/DateUtilsTest.java"
-                   unless="jdk1.2+" />
-
-          <!--  These tests only passes if testcases and Ant classes have
-          been loaded by the same classloader - will throw
-          IllegalAccessExceptions otherwise.  -->
-          <exclude name="${ant.package}/taskdefs/SQLExecTest.java"
-                   unless="tests.and.ant.share.classloader" />
-          <exclude name="${optional.package}/sos/SOSTest.java"
-                   unless="tests.and.ant.share.classloader" />
-          <exclude name="${optional.package}/TraXLiaisonTest.java"
-                   unless="tests.and.ant.share.classloader" />
-          <exclude name="${optional.package}/metamata/MAuditParserTest.java"
-                   unless="tests.and.ant.share.classloader" />
-
-          <!-- failure of this test case kills the current JVM
-          so until the defect is actually fixed it is taken
-          out of the test list -->
-          <exclude name="${ant.package}/taskdefs/JavaTest.java" />
-        </fileset>
-      </batchtest>
-
-    </junit>
-  </target>
-
-  <target name="run-single-test" if="testcase" depends="compile-tests"
-    description="--> runs the single unit test defined in the testcase property">
-
-
-    <junit printsummary="${junit.summary}"
-          haltonfailure="yes" 
-          fork="${junit.fork}"
-          filtertrace="${junit.filtertrace}">
-<!--      <jvmarg value="-classic"/> -->
-      <sysproperty key="ant.home" value="${ant.home}" />
-      <sysproperty key="build.tests" value="${build.tests}"/>
-      <sysproperty key="tests-classpath.value" 
-                   value="${tests-classpath.value}" />
-      <classpath refid="classes.zip" />
-      <classpath refid="tests-classpath"/>
-      <formatter type="plain" usefile="false" />
-      <test name="${testcase}" />
-    </junit>
-  </target>
-
-  <target name="interactive-tests" description="--> runs interactive tests"
-          depends="compile-tests"
-          if="jdk1.3+">
-    <java classpathref="tests-classpath"
-          classname="org.apache.tools.ant.taskdefs.TestProcess" 
-          fork="true" />
-  </target>
-
-  <!--
-       ===================================================================
-         Main target - runs dist-lite by default
-       ===================================================================
-  -->
-  <target name="main"
-          description="--> creates a minimum distribution in ./dist"
-          depends="dist-lite" />
-
-</project>
diff --git a/docs.xml b/docs.xml
deleted file mode 100644
index b3b56d6..0000000
--- a/docs.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<project name="build-site" default="docs" basedir=".">
-
-    <!-- Initialization properties -->
-    <property name="project.name" value="ant"/>
-    <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>
-
-        <anakia basedir="${docs.src}" destdir="${docs.dest}/"
-             extension=".html" style="./faq.vsl"
-             projectFile="${project.file}"
-             includes="faq.xml"
-             lastModifiedCheck="true"
-             templatePath="${templ.path}"
-             velocityPropertiesFile="${velocity.props}">
-        </anakia>
-    </target>
-    
-    <target name="javadocs">
-      <ant antfile="build.xml" target="dist_javadocs">
-        <property name="dist.javadocs" value="${docs.dest}/manual/api" />
-      </ant>
-    </target>
-    
-    <target name="all" depends="docs, javadocs"/>
-</project>
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 acf604c..0000000
--- a/docs/antnews.html
+++ /dev/null
@@ -1,246 +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">
-  <meta name="email" value="conor@cortexebusiness.com.au">
-                <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="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="./artwork/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="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="Vote for a Logo"><strong>Vote for a Logo</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <h3>Polls have closed</h3>
-                                <p>
-      Thanks for voting!
-    </p>
-                                <p>*drum roll* - <a href="logocontest.html">and the winners are....</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 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/artwork/ant_logo.ico b/docs/artwork/ant_logo.ico
deleted file mode 100644
index 9dbc258..0000000
--- a/docs/artwork/ant_logo.ico
+++ /dev/null
Binary files differ
diff --git a/docs/artwork/ant_logo_large.gif b/docs/artwork/ant_logo_large.gif
deleted file mode 100644
index e99363b..0000000
--- a/docs/artwork/ant_logo_large.gif
+++ /dev/null
Binary files differ
diff --git a/docs/artwork/ant_logo_medium.gif b/docs/artwork/ant_logo_medium.gif
deleted file mode 100644
index 44bc07f..0000000
--- a/docs/artwork/ant_logo_medium.gif
+++ /dev/null
Binary files differ
diff --git a/docs/artwork/ant_logo_small.gif b/docs/artwork/ant_logo_small.gif
deleted file mode 100644
index 34080c9..0000000
--- a/docs/artwork/ant_logo_small.gif
+++ /dev/null
Binary files differ
diff --git a/docs/external.html b/docs/external.html
deleted file mode 100644
index f2f7df0..0000000
--- a/docs/external.html
+++ /dev/null
@@ -1,2010 +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="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="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="./artwork/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="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="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="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>
-                    </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 9ce89a5..0000000
--- a/docs/faq.html
+++ /dev/null
@@ -1,1750 +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="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="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="./artwork/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="#defaultexcludes">
-  I've made a &lt;delete&gt; task to delete unwanted
-      sourcesafe control files (CVS files, editor backup files), 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 variable is set,
-      so I have <code>unless="variable"</code> as an attribute 
-      of the target.  The trouble is that all of the targets that this target 
-      depends on are still executed. Why?
-  </a></li>
-                    <li><a href="#include-order">
-  In my fileset, 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 anything at all. What's wrong?
-      
-  </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
-      parse the error messages generated by Ant correctly?
-  </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; don'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>
-                </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,
-          the structure is hoped to be self-explaining.</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 makes 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 are
-        doing an extremely good job at building things" or
-        "Ants are very small and can carry a weight a dozen times
-        of 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 has been
-        created by James Duncan Davidson, who also is 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 now is 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.  Ant became Apache Ant.</p>
-                                        <p>The first version of Ant that was exposed a lager audience
-        was the one that shipped with Tomcat's 3.1 release on 19 April
-        2000.  This version has later been referenced 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 of this, 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 setup is different, 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>
-                        </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: <code>ant
-        -D&lt;name&gt;=&lt;value&gt;</code> lets you define values for
-        properties.  These can then be used within your build file as
-        any normal property: <code>${&lt;name&gt;}</code> will put in
-        <code>&lt;value&gt;</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 nowarn
-                attribute of javac after that</strong> -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.</p>
-                        </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 made a &lt;delete&gt; task to delete unwanted
-      sourcesafe control files (CVS files, editor backup files), 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 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">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 put both an <code>if</code> and an <code>unless</code>
-        attribute into the target. The target 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 wish 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, but 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 that <code>&lt;antcall&gt;</code> tasks do not pass
-        property changes back up to the environment they were called
-        from.</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 sequence <code>${</code>.</li>
-        </ul>
-                                        <p>This is neither readable, nor easy to understand, therefore
-        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
-        better 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.</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 variable is set,
-      so I have <code>unless="variable"</code> as an attribute 
-      of the target.  The trouble is that all of the targets that 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>When your dependencies actually break down the higher level task
-        into several simpler steps, though, this behaviour becomes 
-        counterintuitive. 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 fileset, 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 anything 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 fileset 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 need to trim the list that the includes
-	would produce, use excludes.</p>
-                        </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 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
-      parse the error messages generated by Ant correctly?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>Ant adds a "banner" with the name of the current
-        task in front of all 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 test (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">Listener
-        &amp; Logger documentation</a> 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> 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 are specified on the command line
-        when running Ant.</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; don'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 &lt;fixcrlf&gt; 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>
-              </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/andrews.gif b/docs/images/andrews.gif
deleted file mode 100644
index ef8651a..0000000
--- a/docs/images/andrews.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/andrews2.gif b/docs/images/andrews2.gif
deleted file mode 100644
index 7eff542..0000000
--- a/docs/images/andrews2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/andrews3.gif b/docs/images/andrews3.gif
deleted file mode 100644
index aa52d48..0000000
--- a/docs/images/andrews3.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/ant-logo2.gif b/docs/images/ant-logo2.gif
deleted file mode 100644
index b356391..0000000
--- a/docs/images/ant-logo2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/ant2_logo.gif b/docs/images/ant2_logo.gif
deleted file mode 100644
index 1ab83bd..0000000
--- a/docs/images/ant2_logo.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/antLogo1.png b/docs/images/antLogo1.png
deleted file mode 100644
index 73af91e..0000000
--- a/docs/images/antLogo1.png
+++ /dev/null
Binary files differ
diff --git a/docs/images/antLogo2.png b/docs/images/antLogo2.png
deleted file mode 100644
index 724a9fd..0000000
--- a/docs/images/antLogo2.png
+++ /dev/null
Binary files differ
diff --git a/docs/images/ant_logo.gif b/docs/images/ant_logo.gif
deleted file mode 100644
index 88fa7f1..0000000
--- a/docs/images/ant_logo.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/becker1.gif b/docs/images/becker1.gif
deleted file mode 100644
index 121488c..0000000
--- a/docs/images/becker1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/becker2.gif b/docs/images/becker2.gif
deleted file mode 100644
index e66f83b..0000000
--- a/docs/images/becker2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/becker3.gif b/docs/images/becker3.gif
deleted file mode 100644
index ee5720d..0000000
--- a/docs/images/becker3.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_ant.jpg b/docs/images/blairhughes_ant.jpg
deleted file mode 100644
index fe8d491..0000000
--- a/docs/images/blairhughes_ant.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_ant2.jpg b/docs/images/blairhughes_ant2.jpg
deleted file mode 100644
index 6a8aa76..0000000
--- a/docs/images/blairhughes_ant2.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_ant3.jpg b/docs/images/blairhughes_ant3.jpg
deleted file mode 100644
index 30396c0..0000000
--- a/docs/images/blairhughes_ant3.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_ant4.jpg b/docs/images/blairhughes_ant4.jpg
deleted file mode 100644
index f25d029..0000000
--- a/docs/images/blairhughes_ant4.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_ant5.jpg b/docs/images/blairhughes_ant5.jpg
deleted file mode 100644
index 2a3f3e3..0000000
--- a/docs/images/blairhughes_ant5.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_ant6.jpg b/docs/images/blairhughes_ant6.jpg
deleted file mode 100644
index e3449f1..0000000
--- a/docs/images/blairhughes_ant6.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_germ1.jpg b/docs/images/blairhughes_germ1.jpg
deleted file mode 100644
index 2ebaffe..0000000
--- a/docs/images/blairhughes_germ1.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_germ2.jpg b/docs/images/blairhughes_germ2.jpg
deleted file mode 100644
index 99c5d13..0000000
--- a/docs/images/blairhughes_germ2.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_germ3.jpg b/docs/images/blairhughes_germ3.jpg
deleted file mode 100644
index 63f2293..0000000
--- a/docs/images/blairhughes_germ3.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_germ4.jpg b/docs/images/blairhughes_germ4.jpg
deleted file mode 100644
index d66cfe7..0000000
--- a/docs/images/blairhughes_germ4.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_germ5.jpg b/docs/images/blairhughes_germ5.jpg
deleted file mode 100644
index 2d41af0..0000000
--- a/docs/images/blairhughes_germ5.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_germ6.jpg b/docs/images/blairhughes_germ6.jpg
deleted file mode 100644
index 9b62a91..0000000
--- a/docs/images/blairhughes_germ6.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_keis1.jpg b/docs/images/blairhughes_keis1.jpg
deleted file mode 100644
index 8905b36..0000000
--- a/docs/images/blairhughes_keis1.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_keis2.jpg b/docs/images/blairhughes_keis2.jpg
deleted file mode 100644
index 8e1986d..0000000
--- a/docs/images/blairhughes_keis2.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_keis3.jpg b/docs/images/blairhughes_keis3.jpg
deleted file mode 100644
index 802eb9e..0000000
--- a/docs/images/blairhughes_keis3.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_keis4.jpg b/docs/images/blairhughes_keis4.jpg
deleted file mode 100644
index 773bced..0000000
--- a/docs/images/blairhughes_keis4.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/blairhughes_keis5.jpg b/docs/images/blairhughes_keis5.jpg
deleted file mode 100644
index 80054e2..0000000
--- a/docs/images/blairhughes_keis5.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/bogaert.gif b/docs/images/bogaert.gif
deleted file mode 100644
index 230e26a..0000000
--- a/docs/images/bogaert.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/bolazar.gif b/docs/images/bolazar.gif
deleted file mode 100644
index 7b4b7d3..0000000
--- a/docs/images/bolazar.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/burkhart.gif b/docs/images/burkhart.gif
deleted file mode 100644
index ae2e16c..0000000
--- a/docs/images/burkhart.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/cain1.png b/docs/images/cain1.png
deleted file mode 100644
index 76801aa..0000000
--- a/docs/images/cain1.png
+++ /dev/null
Binary files differ
diff --git a/docs/images/cain2.png b/docs/images/cain2.png
deleted file mode 100644
index 10be827..0000000
--- a/docs/images/cain2.png
+++ /dev/null
Binary files differ
diff --git a/docs/images/cain3.png b/docs/images/cain3.png
deleted file mode 100644
index ae4b97f..0000000
--- a/docs/images/cain3.png
+++ /dev/null
Binary files differ
diff --git a/docs/images/cain4.png b/docs/images/cain4.png
deleted file mode 100644
index 0e698de..0000000
--- a/docs/images/cain4.png
+++ /dev/null
Binary files differ
diff --git a/docs/images/cheesman.jpg b/docs/images/cheesman.jpg
deleted file mode 100644
index 8cf5eb9..0000000
--- a/docs/images/cheesman.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/coleman.gif b/docs/images/coleman.gif
deleted file mode 100644
index 9289df2..0000000
--- a/docs/images/coleman.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/conor_ascii.gif b/docs/images/conor_ascii.gif
deleted file mode 100644
index 3944ec3..0000000
--- a/docs/images/conor_ascii.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/duggins.gif b/docs/images/duggins.gif
deleted file mode 100644
index bb028cb..0000000
--- a/docs/images/duggins.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/duggins2.gif b/docs/images/duggins2.gif
deleted file mode 100644
index 0ef1458..0000000
--- a/docs/images/duggins2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/florent1.jpg b/docs/images/florent1.jpg
deleted file mode 100644
index 2a4d952..0000000
--- a/docs/images/florent1.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/florent2.jpg b/docs/images/florent2.jpg
deleted file mode 100644
index 6f34ebe..0000000
--- a/docs/images/florent2.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/florent3.jpg b/docs/images/florent3.jpg
deleted file mode 100644
index 8186b2c..0000000
--- a/docs/images/florent3.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/florent4.jpg b/docs/images/florent4.jpg
deleted file mode 100644
index e769840..0000000
--- a/docs/images/florent4.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/hughes1.gif b/docs/images/hughes1.gif
deleted file mode 100644
index fda0fdd..0000000
--- a/docs/images/hughes1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/hughes2.gif b/docs/images/hughes2.gif
deleted file mode 100644
index fe8b70b..0000000
--- a/docs/images/hughes2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/james.jpg b/docs/images/james.jpg
deleted file mode 100644
index 8e65d59..0000000
--- a/docs/images/james.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/jw_ec_logo_finalist2002.gif b/docs/images/jw_ec_logo_finalist2002.gif
deleted file mode 100644
index 68a4e41..0000000
--- a/docs/images/jw_ec_logo_finalist2002.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/kannikkatt.bmp b/docs/images/kannikkatt.bmp
deleted file mode 100644
index f3bc25e..0000000
--- a/docs/images/kannikkatt.bmp
+++ /dev/null
Binary files differ
diff --git a/docs/images/kannikkatt.gif b/docs/images/kannikkatt.gif
deleted file mode 100644
index 704d482..0000000
--- a/docs/images/kannikkatt.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/kolesnikova.gif b/docs/images/kolesnikova.gif
deleted file mode 100644
index ce1c015..0000000
--- a/docs/images/kolesnikova.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/lecho.jpg b/docs/images/lecho.jpg
deleted file mode 100644
index 758d1a2..0000000
--- a/docs/images/lecho.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/lecho_orig.jpg b/docs/images/lecho_orig.jpg
deleted file mode 100644
index de9ab79..0000000
--- a/docs/images/lecho_orig.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/marron.gif b/docs/images/marron.gif
deleted file mode 100644
index 74186c8..0000000
--- a/docs/images/marron.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/mishra.gif b/docs/images/mishra.gif
deleted file mode 100644
index 58c719f..0000000
--- a/docs/images/mishra.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/mishra_orig.gif b/docs/images/mishra_orig.gif
deleted file mode 100644
index 1cc7325..0000000
--- a/docs/images/mishra_orig.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/mwhyte-ant.jpg b/docs/images/mwhyte-ant.jpg
deleted file mode 100644
index 1a3ad07..0000000
--- a/docs/images/mwhyte-ant.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/nickk.gif b/docs/images/nickk.gif
deleted file mode 100644
index edda608..0000000
--- a/docs/images/nickk.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/nicksant1.gif b/docs/images/nicksant1.gif
deleted file mode 100644
index b639a21..0000000
--- a/docs/images/nicksant1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/nicksant3.gif b/docs/images/nicksant3.gif
deleted file mode 100644
index 4b72d5c..0000000
--- a/docs/images/nicksant3.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/nicksants2.gif b/docs/images/nicksants2.gif
deleted file mode 100644
index 12a0647..0000000
--- a/docs/images/nicksants2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/petroff.jpg b/docs/images/petroff.jpg
deleted file mode 100644
index a90e631..0000000
--- a/docs/images/petroff.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/ripley.jpg b/docs/images/ripley.jpg
deleted file mode 100644
index b6e21e5..0000000
--- a/docs/images/ripley.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/schloemer.gif b/docs/images/schloemer.gif
deleted file mode 100644
index c60aa81..0000000
--- a/docs/images/schloemer.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/schloemer2.gif b/docs/images/schloemer2.gif
deleted file mode 100644
index 7fd2a8d..0000000
--- a/docs/images/schloemer2.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/schloemer2_orig.gif b/docs/images/schloemer2_orig.gif
deleted file mode 100644
index 8696a34..0000000
--- a/docs/images/schloemer2_orig.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/schloemer_orig.gif b/docs/images/schloemer_orig.gif
deleted file mode 100644
index e38b8ff..0000000
--- a/docs/images/schloemer_orig.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/trogdon.gif b/docs/images/trogdon.gif
deleted file mode 100644
index 1a683b8..0000000
--- a/docs/images/trogdon.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/umasankar.jpg b/docs/images/umasankar.jpg
deleted file mode 100644
index 64a6638..0000000
--- a/docs/images/umasankar.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/wilhelms3.gif b/docs/images/wilhelms3.gif
deleted file mode 100644
index e00f658..0000000
--- a/docs/images/wilhelms3.gif
+++ /dev/null
Binary files differ
diff --git a/docs/index.html b/docs/index.html
deleted file mode 100644
index aa3e3ec..0000000
--- a/docs/index.html
+++ /dev/null
@@ -1,281 +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">
-  <meta name="email" value="conor@cortexebusiness.com.au">
-                <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="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="./artwork/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="Logo Contest"><strong>Logo Contest</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <h3>Polls have closed</h3>
-                                <p>*drum roll* - <a href="logocontest.html">and the winners are....</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 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 without
-make's wrinkles.
-</p>
-                                <p>
-Why another build tool when there is already make, gnumake, nmake, jam, and
-others? Because all of 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 and 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. "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 use yet another format to use and remember.
-</p>
-                                <p>
-Ant is different. Instead of a model where it is extended with shell based
-commands, it 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 which 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 `find . -name foo -exec rm {}` 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 exec rule 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 most recent release 
-<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 1d667f6..0000000
--- a/docs/logocontest.html
+++ /dev/null
@@ -1,223 +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="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="./artwork/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 (conor at cortexebusiness.com.au)
-  </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/logos.html b/docs/logos.html
deleted file mode 100644
index 92ffb5f..0000000
--- a/docs/logos.html
+++ /dev/null
@@ -1,1879 +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="Stefan Bodewig">
-  <meta name="email" value="stefan.bodewig@epost.de">
-        
-      <title>Apache Ant - Ant Logo Proposals</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="./artwork/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 needs a Logo"><strong>Ant needs a Logo</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>One of the requirements for Ant2 is, that Ant should have a
-    logo.  You can find the logos that have been proposed to the Ant
-    mailing lists on this page.</p>
-                                <p>Tell us what you think of them (yes, <em>Powered by</em> should
-    better be <em>Built by</em>).</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Entry
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Group
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author
-        </font>
-  </td>
-                      <td bgcolor="#039acc" 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">
-          1
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          1
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Bill J. Fellows (Bill.J.Fellows at mail.sprint.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/antLogo1.png" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          2
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          1
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Bill J. Fellows (Bill.J.Fellows at mail.sprint.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/antLogo2.png" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          3
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          2
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Christoph Wilhelms (Christoph.Wilhelms at t-online.de)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/ant_logo.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          4
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          2
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Christoph Wilhelms (Christoph.Wilhelms at t-online.de)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/ant2_logo.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          5
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          3
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Warner Onstine (warner at warneronstine.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/ant-logo2.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          6
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          4
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Chris Coleman (chris.coleman at csfb.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/coleman.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          7
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          5
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Stefan Lecho (Stefan.Lecho at iconmedialab.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/lecho.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          8
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          6
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          David Trogdon (DTrogdon at orgtek.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/trogdon.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          9
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          7
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Mirko Klemm (Mirko.Klemm at t-online.de)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="http://www.mutantenzoo.de/antlogo-400.png" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          10
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          8
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ryan P Ripley (ryan.ripley at bms.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/ripley.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          11
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          9
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Christoph Wilhelms (Christoph.Wilhelms at t-online.de)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/wilhelms3.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          12
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          10
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Shane Petroff (shane at hayward.ca)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/petroff.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          13
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          10
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Jim Cheesman (jchees at msl.es)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/cheesman.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          14
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          11
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Kevin Duggins (Kevin.Duggins at definityhealth.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/duggins.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          15
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          12
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Kevin Duggins (Kevin.Duggins at definityhealth.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/duggins2.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          16
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          13
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Justin Ransom (Justin.Ransom at rubus.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/hughes1.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          17
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          14
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Justin Ransom (Justin.Ransom at rubus.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/hughes2.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          18
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          15
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Martin Schl?mer (martin.schloemer at phase26.de)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/schloemer.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          19
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          15
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Martin Schl?mer (martin.schloemer at phase26.de)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/schloemer2.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          20
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          16
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_ant.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          21
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          17
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_ant2.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          22
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          18
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_ant3.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          23
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          19
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_ant4.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          24
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          20
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_ant5.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          25
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          21
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_ant6.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          26
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          22
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_germ1.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          27
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          22
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_germ2.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          28
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          23
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_germ3.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          29
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          23
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_germ4.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          30
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          24
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_germ5.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          31
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          24
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_germ6.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          32
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          25
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_keis1.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          33
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          25
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_keis3.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          34
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          26
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_keis2.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          35
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          27
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_keis4.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          36
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          28
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Design Services Team at Hewlett Packard (blair_hughes at hp.com&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/blairhughes_keis5.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          37
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          29
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Alicia Kolesnikova
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/kolesnikova.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          38
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          30
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Matthias Becker (matthias.becker at media4content.de)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/becker1.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          39
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          30
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Matthias Becker (matthias.becker at media4content.de)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/becker2.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          40
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          30
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Matthias Becker (matthias.becker at media4content.de)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/becker3.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          41
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          31
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Alicia Kolesnikova
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/bogaert.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          42
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          32
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Joe Marron (jmarron at contextmedia.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/marron.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          43
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          33
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Nick King (nickk at remoteapps.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/nicksant1.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          44
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          33
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Nick King (nickk at remoteapps.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/nicksants2.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          45
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          33
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Nick King (nickk at remoteapps.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/nicksant3.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          46
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          16
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Mike Whyte (mgwhyte at mailbox.co.za)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/mwhyte-ant.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          47
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          34
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Shine Kannikkatt (ShineKannikkatt at onerev.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/kannikkatt.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          48
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          35
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Hirdesh Mishra (hmplus at yahoo.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/mishra.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          49
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          36
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          nickk at remoteapps.com
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/nickk.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          50
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          37
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          fmignon at mail.com
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/florent1.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          51
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          37
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          fmignon at mail.com
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/florent2.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          52
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          38
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Steve Krone (contact at sitepen.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="http://www.sitepen.com/portfolio/images/antlogo.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          53
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          39
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Magesh Umasankar (umagesh at apache.org)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/umasankar.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          54
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          40
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          James Andrews (jimhole23 at yahoo.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/andrews.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          55
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          41
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Conor MacNeill (conor at cortexebusiness.com.au)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <pre>
-&lt;ant&gt;
- \_/
-\(_)/
--(_)-
-/(_)\
-</pre>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          56
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          40
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          James Andrews (jimhole23 at yahoo.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/andrews2.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          57
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          42
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Eric Cain (arcain at unitedbinary.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/cain1.png" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          58
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          42
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Eric Cain (arcain at unitedbinary.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/cain2.png" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          59
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          42
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Eric Cain (arcain at unitedbinary.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/cain3.png" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          60
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          42
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Eric Cain (arcain at unitedbinary.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/cain4.png" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          61
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          43
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Scott Andrews (scott.andrews at bankofamerica.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/andrews3.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          62
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          44
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Joe Burkhart (joeburkhart99 at yahoo.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/burkhart.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          63
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          45
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Adam James (adam_james_ at hotmail.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/james.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          64
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          46
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Kanat Bolazar (kanat2 at yahoo.com)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/bolazar.gif" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          65
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          37
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          fmignon at mail.com
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/florent3.jpg" />
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          66
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          37
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          fmignon at mail.com
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <img src="images/florent4.jpg" />
-        </font>
-  </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/logovote.html b/docs/logovote.html
deleted file mode 100644
index 5279b28..0000000
--- a/docs/logovote.html
+++ /dev/null
@@ -1,105 +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="Erik Hatcher" />
-<meta name="email" value="ehatcher@apache.org" />
-<title>The Jakarta Site - Apache Ant Logo Vote</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" cellspacing="4" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0">
-  <tr>
-    <td colspan="2" width="896"><hr noshade size="1" /></td>
-    </tr>
-    <tr>
-      <!-- LEFT SIDE NAVIGATION -->
-      <td valign="top" nowrap>
-      <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 &amp; 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" width="437">
-      <table border="0" cellspacing="0" cellpadding="2" width="100%">
-        <tr>
-          <td bgcolor="#525D76">
-          <font color="#ffffff" face="arial,helvetica,sanserif"><a name="vote">
-          <strong>Vote</strong></a> </font></td>
-        </tr>
-        </table>
-        Polls have closed.  <a href="http://vote.sparklit.com/poll.spark/593305">View results</a>
-      </td>
-    </tr>
-    <!-- FOOTER -->
-    <tr>
-      <td colspan="2" width="896"><hr noshade size="1" /></td>
-      </tr>
-      <tr>
-        <td colspan="2" width="896">
-        <div align="center">
-          <font color="#525D76" size="-1"><em>Copyright © 2000-2002, Apache Software 
-          Foundation </em></font>
-        </div>
-        </td>
-      </tr>
-  </table>
-  <p>&nbsp;</p>
-
-</body>
-
-</html>
-<!-- end the processing -->
\ No newline at end of file
diff --git a/docs/manual/CoreTasks/ant.html b/docs/manual/CoreTasks/ant.html
deleted file mode 100644
index c617214..0000000
--- a/docs/manual/CoreTasks/ant.html
+++ /dev/null
@@ -1,227 +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.
-    </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 dca5a27..0000000
--- a/docs/manual/CoreTasks/antcall.html
+++ /dev/null
@@ -1,114 +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>
-</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 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 90670a3..0000000
--- a/docs/manual/CoreTasks/antstructure.html
+++ /dev/null
@@ -1,43 +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>. 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 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 7ba809a..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 execon is deprecated and only kept for backwards
-compatibilty.</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 destdir 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 destdir.</p>
-<p>At least one fileset is required, 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 dest 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 destdir
-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 be65409..0000000
--- a/docs/manual/CoreTasks/available.html
+++ /dev/null
@@ -1,122 +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>
-  
-</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 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 4d07d82..0000000
--- a/docs/manual/CoreTasks/chmod.html
+++ /dev/null
@@ -1,122 +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">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">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 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/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 9c0eb00..0000000
--- a/docs/manual/CoreTasks/conditions.html
+++ /dev/null
@@ -1,246 +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 the a given Strings 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>
-
-<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 80a9bcb..0000000
--- a/docs/manual/CoreTasks/copy.html
+++ /dev/null
@@ -1,154 +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.  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 <var>overwrite</var> attribute.</p>
-<p><a href="../CoreTypes/fileset.html">FileSet</a>s are used to select files to copy.  
-To use a fileset, the <var>todir</var> 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">One of either <var>file</var> or 
-    at least one nested fileset element.</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. Defaults to &quot;no&quot;.
-      [ignored on Java 1.1]</td>
-    <td valign="top" align="center">No</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 <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 file attribute is already specified, only
-    <var>todir</var> 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. Defaults to &quot;no&quot;.</td>
-    <td valign="top" align="center">No</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. Defaults to &quot;no&quot;. 
-                     Nested filtersets will be used even if this value is &quot;no&quot;</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. Defaults to &quot;no&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>fileset</h4>
- <p><a href="../CoreTypes/fileset.html">FileSets</a> are used to select files to copy.  
- To use a fileset, the <var>todir</var> attribute must be set.</p>
- 
-<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>
- 
-<h4>filterset</h4>
- <p><a href="../CoreTypes/filterset.html">Filtersets</a> are used to replace tokens in files that are copied.  
- To use a filterset just add the nested filterset elements.</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 file to a directory</b></p>
-<pre>
-  &lt;copy file=&quot;myfile.txt&quot; todir=&quot;../some/dir/tree&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
-&quot;<code>.bak</code>&quot; 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 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 UMASK 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 &lt;exec executable="cp" ... &gt; instead. 
-
-<hr><p align="center">Copyright &copy; 2001 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 159a250..0000000
--- a/docs/manual/CoreTasks/cvs.html
+++ /dev/null
@@ -1,123 +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">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 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;cvs cvsRoot=&quot;:pserver:anoncvs@jakarta.apache.org:/home/cvspublic&quot;
-       package=&quot;jakarta-tools&quot;
-       dest=&quot;${ws.dir}&quot;
-  /&gt;</pre>
-<p>checks out the package/module &quot;jakarta-tools&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.</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 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/delete.html b/docs/manual/CoreTasks/delete.html
deleted file mode 100644
index 5194d23..0000000
--- a/docs/manual/CoreTasks/delete.html
+++ /dev/null
@@ -1,156 +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 doesnt
-seem to work, read up on the 
-<a href="../dirtasks.html#defaultexcludes">default exclusion set</a> then at the option
-down below to disable this feature.
- 
-<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"> Use <code>&lt;fileset&gt;</code>.
-      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/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 8bd4512..0000000
--- a/docs/manual/CoreTasks/exec.html
+++ /dev/null
@@ -1,171 +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">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">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>
-<h5>Examples</h5>
-<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 b6e7204..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 occurences 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 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 f70d6dc..0000000
--- a/docs/manual/CoreTasks/input.html
+++ /dev/null
@@ -1,90 +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 displaying a message and
-reading a line of input from the console (System.in). The user will need to press
-the Return key.
-</p>
-<p>The message displayed 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 require the user to reenter values until the entered
-value matches 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 and input task will
-		require the user to reenter arguments until the entered one matches one of the
-		predefined. 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.</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.</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.</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+retrun key' to continue build or 'n+return key'
-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 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 c961dda..0000000
--- a/docs/manual/CoreTasks/java.html
+++ /dev/null
@@ -1,170 +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">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>
-</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 23dd775..0000000
--- a/docs/manual/CoreTasks/javac.html
+++ /dev/null
@@ -1,453 +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 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>
-</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 Notes at the end)</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 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 that contains
-      include patterns.</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 that contains
-      exclude patterns.</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 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 <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. (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 -nowarn 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">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 (jikes and classic)</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">fork</td>
-    <td valign="top">whether to execute Javac using the JDK compiler
-      externally; defaults to <code>no</code>.  You can also give a
-      complete path to the javac executable to use instead of
-      <code>yes</code>, which would run the compiler of the Java
-      vesrion that is currently running Ant.</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 javac 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 javac 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>, legal values are &quot;1.3&quot; and
-    &quot;1.4&quot; - 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">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 >= 1.2)</code>, legal values are
-    &quot;none&quot; or a comma separated list of the following keywords.
-    Valid keywords are &quot;lines&quot;, &quot;vars&quot; and &quot;source&quot;
-    - if debuglevel is not specified, by default, nothing will be
-    appended to <code>-g</code>.  If debug is not turned on, this attribute will be
-    ignored.
-    </td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">compiler</td>
-    <td valign="top">The compiler implementation to use.
-      Defaults to the value of the <code>build.compiler</code> property.</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>Javac</code>'s <i>srcdir</i>, <i>classpath</i>,
-<i>sourcepath</i>, <i>bootclasspath</i> and <i>extdirs</i> 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">here</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">implementation</td>
-    <td align="center">Only use this argument if the chosen
-      implementation matches this attribute.  Possible choices are the
-      same as those of the build.compiler property.</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 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>
-
-<h3>Jikes Notes</h3>
-
-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>
-<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 f0b7992..0000000
--- a/docs/manual/CoreTasks/javadoc.html
+++ /dev/null
@@ -1,621 +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 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>
-<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="2">At least one of the two or nested
-      <code>&lt;sourcepath&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">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">sourcefiles</td>
-    <td valign="top">Comma separated list of source files</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="middle" rowspan="2">at least one of the two
-    or nested <code>&lt;source&gt;</code> or <code>&lt;package&gt;</code></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>
-  </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">all</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">FUTURE: 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">FUTURE: 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">FUTURE: 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">1.1</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">tag</td>
-    <td valign="top">Specifies how custom tags should be handled. See
-      <a href="#tagelement">below</a> for details.</td>
-    <td align="center" valign="top">1.4</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">1.2</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">all</td>
-    <td valign="top" align="center">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>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>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>
-  
-<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 a78aff8..0000000
--- a/docs/manual/CoreTasks/loadfile.html
+++ /dev/null
@@ -1,117 +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. There is no explicit limit
- upon the size of the file which can be loaded, but loading very large
- files is not something anyone has yet explored. Because the file is
- converted to text
-
-</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>
-  <tr>
-    <td valign="top">evaluateProperties</td>
-    <td valign="top">flag to enable property evalation in the file</td>
-    <td align="center" valign="top">No, default "false"</td>
-  </tr>
-  <tr>
-    <td valign="top">makeOneLine</td>
-    <td valign="top">flag to strip out newlines (but not spaces or
-        tabs) from the file</td>
-    <td align="center" valign="top">No, default "false"</td>
-  </tr>
-</table>
-<p>
-The <tt>makeOneLine</tt> parameter enables you to use a file as an
-input to task parameters which expect single line input. It flattens
-the file by removing all carriage return and line feed characters,
-so that the file
-<pre>a
-b
-c
-</pre>would become "abc": you need spaces or
-commas at the end/start of line to stop alphanumeric characters
-being merged together.
-
-<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"
-      makeOneLine="true" /&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"
-      evaluateProperties="true" /&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/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 3bf2806..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.
-These tasks do not do any dependency checking; the output file is 
-always generated</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 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 30621d0..0000000
--- a/docs/manual/CoreTasks/patch.html
+++ /dev/null
@@ -1,77 +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>
-</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 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 82a428d..0000000
--- a/docs/manual/CoreTasks/pathconvert.html
+++ /dev/null
@@ -1,198 +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 path, path reference, or fileset reference to the form usable on a
-   specified platform
-   and stores the result in a given property.  This operation is useful when script files
-   (batch files or shell scripts) must be generated my the build system and they contain
-   path information that must be properly formatted for the target architecture, not the
-   architecture on which the build is running, or when you need to create a list of files
-   separated by a given character, like a comma or a space.
-</p>
-<p>Prefix maps 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' or 'windows'.  <BR>This is a
-        shorthand mechanism for specifying both <tt>pathsep</tt> and <tt>dirsep</tt>
-        according to the specified target architecture.
-    </td>
-    <td valign="top" align="center">
-       Must specify one of <tt>targetos</tt>, <tt>pathsep</tt>,or <tt>dirsep</tt>.
-    </td>
-  </tr>
-  <tr>
-    <td valign="top">dirsep</td>
-    <td valign="top">
-       The character 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 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 PATH or FILESET
-        defined elsewhere</td>
-    <td valign="top" align="center">No, if omitted a nested &lt;path> 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 <i>from</i> 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><i>Note that the map elements are applied in the order specified and the only the first
-   matching map element is applied.  So, the ordering of your map elements can be important
-   if any <TT>from</tt> values are prefixes of other <tt>from</tt> values.</i>
-</p>   
-<h4>path</h4>
-<p>If a path reference is not supplied using the <i>refid</i> attribute, then a
-   nested path 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 property <b>wl.home</b> has the value
-<tt>d:\weblogic</tt> on Windows and <tt>/weblogic</tt> on Unix.</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;newpath&quot; refid=&quot;wl.path&quot;/&gt;
-</pre>
-<p>Assuming wl.property has the value "d:\weblogic", will generate the path shown below
-   and store it in the property named <tt>newpath</tt>
-</p>   
-<pre>
-/weblogic/lib/weblogicaux.jar:/weblogic/classes:/weblogic/mssqlserver4/classes:/WINNT/SYSTEM32
-</pre>
-Note that the drive letters have been removed.  This is the default behavior when no map
-elements have been specified.
-
-<h4>Example 2</h4>
-<pre>
-    
-    &lt;pathconvert targetos=&quot;unix&quot; property=&quot;newpath&quot; &gt;
-      &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&gt;
-</pre>
-This generates the exact same path as the previous example.  It demonstrates the use of
-a nested path element.
-<h4>Example 3</h4>
-<pre>
-    &lt;pathconvert targetos=&quot;unix&quot; property=&quot;newpath&quot; refid=&quot;wl.path&quot;&gt;
-      &lt;map from=&quot;d:&quot; to=&quot;/foo&quot;/&gt;
-      &lt;map from=&quot;c:&quot; to=&quot;/bar&quot;/&gt;
-    &lt;/pathconvert&gt;
-</pre>
-<p>This example specifies two map entries that will convert path elements that start with
-<tt>c:</tt> to <TT>/dos</tt> and <tt>d:</tt> to <TT>/</tt>.  The resulting path is shown
-below.</p>
-<pre>
-/weblogic/lib/weblogicaux.jar:/weblogic/classes:/weblogic/mssqlserver4/classes:/dos/WINNT/SYSTEM32
-</pre>
-<h4>Example 4</h4>
-<pre>
-    &lt;pathconvert targetos=&quot;windows&quot; property=&quot;newpath&quot; &gt;
-      &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;/dos/winnt/System32&quot; /&gt;
-      &lt;/path&gt;
-      &lt;map from=&quot;/dos&quot; to=&quot;c:\&quot;/&gt;
-      &lt;map from=&quot;/&quot; to=&quot;d:\&quot;/&gt;
-    &lt;/pathconvert&gt;
-</pre>
-<p>This example, similar to the one above but targetting windows, specifies two map
-entries that will convert path elements that start with
-<tt>/dos</tt> to <TT>c:\</tt> and <tt>/</tt> to <TT>d:\</tt>.  Note that the order of the
-map elements was important here since <tt>/</tt> is a prefix of <tt>/dos</tt>.
-The resulting path is shown below.</p>
-<pre>
-d:\weblogic\lib\weblogicaux.jar;d:\weblogic\classes;d:\weblogic\mssqlserver4\classes;c:\WINNT\SYSTEM32
-</pre>
-<h4>Example 5</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>
-
-<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/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 45d6fa6..0000000
--- a/docs/manual/CoreTasks/recorder.html
+++ /dev/null
@@ -1,158 +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">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">messageprefix</td>
-    <td valign="top">Whether or not to include the message prefixes (things
-    like the name of the tasks or targets, etc). This has the same effect as
-    the <code>-emacs</code> command line parameter does to the screen output.
-    [yes|no]</td>
-    <td align="center" valign="middle">no</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 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 c49040c..0000000
--- a/docs/manual/CoreTasks/replace.html
+++ /dev/null
@@ -1,177 +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 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">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 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 6bf8542..0000000
--- a/docs/manual/CoreTasks/rmic.html
+++ /dev/null
@@ -1,190 +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. There are three choices:</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>
-</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>
-<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 f79c030..0000000
--- a/docs/manual/CoreTasks/sql.html
+++ /dev/null
@@ -1,277 +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 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">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 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 9c5a798..0000000
--- a/docs/manual/CoreTasks/style.html
+++ /dev/null
@@ -1,206 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Style Task</title>
-</head>
-
-<body>
-
-<h2><a name="style">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>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;style 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;/style&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 d846ec0..0000000
--- a/docs/manual/CoreTasks/tar.html
+++ /dev/null
@@ -1,229 +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>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>
-
-<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>
-</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 4dd756c..0000000
--- a/docs/manual/CoreTasks/unzip.html
+++ /dev/null
@@ -1,90 +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>
-</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 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 8fb80bc..0000000
--- a/docs/manual/CoreTasks/uptodate.html
+++ /dev/null
@@ -1,67 +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 files are more up to date than a set of
-Source files. Source files are specified by nested &lt;srcfiles&gt;
-elements, these are <a href="../CoreTypes/fileset.html">FileSet</a>s, while target
-files are specified using a nested <a href="../CoreTypes/mapper.html">mapper</a>
-element.</p>
-<p>The value part of the property being set is <i>true</i> if the
-timestamp of the target files is more recent than the timestamp of
-every corresponding source file.</p>
-<p>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
-targetfile 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. Defaults to &quot;true&quot;.</td>
-    <td valign="top" align="center">No</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 mapper element is 
-      present.</td>
-  </tr>
-</table>
-<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><i>xmlBuild.notRequired</i></code> to the value &quot;true&quot;
-if the <i>${deploy}/xmlClasses.jar</i> is more up to date than any of the DTD files in the <i>${src}/xml</i> 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>
-<p>as well.</p>
-<hr>
-<p align="center">Copyright &copy; 2001 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/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/filelist.html b/docs/manual/CoreTypes/filelist.html
deleted file mode 100644
index cc0827b..0000000
--- a/docs/manual/CoreTypes/filelist.html
+++ /dev/null
@@ -1,64 +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 filenames that may or may not exist.  Multiple files are
-specified via a comma-separated list, with no support for wildcards.
-FileLists 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>
-<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">Comma-separated 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 refid=&quot;docfiles&quot;/&gt; 
-</pre></blockquote>
-
-<p>Same files as the example above.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001 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 72976c4..0000000
--- a/docs/manual/CoreTypes/fileset.html
+++ /dev/null
@@ -1,99 +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;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 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;${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 example above.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001 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 85d807b..0000000
--- a/docs/manual/CoreTypes/filterset.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<HTML>
-<HEAD>
-  <TITLE>FilterSet Type</TITLE>
-</HEAD>
-
-<BODY>
-<H2><A name="fileset">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>target</CODE> - i.e., as children of 
-<CODE>project</CODE>.</P>In addition, Filtersets can have begintoken and/or 
-endtoken attributes to define what to match. <BR>Filtersets are used for doing 
-replacements in tasks like copy etc.<BR>
-
-<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 
-      <STRONG>@</STRONG>Date@</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 
-      @Date<STRONG>@</STRONG></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 @<STRONG>Date</STRONG>@</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 Thursday, April 26, 2001</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>The file to load tokens from should be a properties file of 
-      name value pairs.</TD>
-    <TD vAlign=top align="center">Yes</TD>
-  </TR>
-</TABLE>
-
-<H4>Examples</H4>
-
-<p>You are copying the version.txt file to the dist directory from the build directory 
-but wish to replace the token @DATE@ with todays date.</p>
-<BLOCKQUOTE><PRE>
-&lt;copy file=&quot;${build.home}/version.txt&quot; toFile=&quot;${dist.home}/version.txt&quot;&gt;
-  &lt;filterset&gt;
-    &lt;filter token=&quot;DATE&quot; value=&quot;${DATE}&quot;/&gt;
-  &lt;/filterset&gt;
-&lt;/copy&gt;
-</PRE></BLOCKQUOTE>
-
-<p>You are copying the version.txt file to the dist directory from the build directory 
-but wish to replace the token %DATE* with todays date.</p>
-<BLOCKQUOTE><PRE>
-&lt;copy file=&quot;${build.home}/version.txt&quot; toFile=&quot;${dist.home}/version.txt&quot;&gt;
-  &lt;filterset begintoken=&quot;%&quot; endtoken=&quot;*&quot;&gt;
-    &lt;filter token=&quot;DATE&quot; value=&quot;${DATE}&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.home}/docs&quot; &gt;
-  &lt;fileset dir=&quot;${build.home}/docs&quot;&gt;
-    &lt;include name=&quot;**/*.html&quot;&gt;
-  &lt;/fileset&gt;
-  &lt;filterset begintoken=&quot;%&quot; endtoken=&quot;*&quot;&gt;
-    &lt;filter token=&quot;DATE&quot; value=&quot;${DATE}&quot;/&gt;
-    &lt;filtersfile file=&quot;${user.home}/dist.properties&quot;/&gt;
-  &lt;/filterset&gt;
-&lt;/copy&gt;
-</PRE></BLOCKQUOTE>
-
-<HR>
-
-<P align=center>Copyright &copy; 2001 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 270d787..0000000
--- a/docs/manual/CoreTypes/patternset.html
+++ /dev/null
@@ -1,168 +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>
-<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 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 adfefaa..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="file://D:\javaext\jakarta-ant-1.4alpha\docs\manual\Integration\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 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 ddcaa19..0000000
--- a/docs/manual/OptionalTasks/depend.html
+++ /dev/null
@@ -1,178 +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>Nested Elements</h3>
-<p><code>depend</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>
-<blockquote>
-<pre>&lt;depend srcdir=&quot;${java.dir}&quot;
-        destdir=&quot;${build.classes}&quot;
-        cache=&quot;depcache&quot;
-        closure=&quot;yes&quot;/&gt;</pre>
-</blockquote>
-
-<p> In this example classes in the ${build.classes} directory will be removed if 
-they depend on out-of-date classes. Classes are considered out of date with 
-respect to the source in the ${java.dir} directory using the same mechanism as 
-the javac task. In this instance the depend task caches its dependency 
-information in the depcache 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/dotnet.html b/docs/manual/OptionalTasks/dotnet.html
deleted file mode 100644
index aab7c3b..0000000
--- a/docs/manual/OptionalTasks/dotnet.html
+++ /dev/null
@@ -1,509 +0,0 @@
-<html>
-<head>
-<title>.NET Tasks</title>
-</head>
-
-<body bgcolor="#ffffff">
-<h1>.NET classes for Ant</h1>
-
-<h2>Vision</h2>
-<p>
-Make ant the definitive build tool for .NET projects, just
-as it is becoming for java projects
-</p>
-
-<h2>Detail</h2>
-
-<p>
-The emergent policy in big java projects is 'IDE for code and debug';
-Ant for builds, test and deployment. While IDEs are great for an 
-individual development task, Ant not only rebuilds everything insanely
-fast, it has great support for modern deployment tasks -ftp upload, 
-EJB servers, SQL commands, all can be done from a relatively simple
-XML declaration of what you want done. Also in a large project 
-(especially open source) there is no means of dictating which IDE to use.
-Ant gives IDE independence, cross platform portability and ease of 
-extensibility. </p>
- 
-<p>
-
-Projects using .net should be able to use the same tool. This will 
-avoid everyone being dependent on Visual Studio.net (if they have it) 
-supplemented with makefiles and batch files. Anyone doing mixed java/dotnet
-development will be particulary grateful, as they can have a unified build 
-process. </p>
-
-<p>
-
-If at sometime in the future bits of .net do appear on different platforms 
-then ant based build files will migrate -once the ant tasks have been 
-migrated and any hard codings of DOS-descendant file system conventions 
-removed from the build.xml files.</p>
-
-<h2>Key .net Tasks</h2>
-
-<ol>
-<li>csc - csharp compiler - *.csc -&gt; output</li>
-<li>ilasm - IL assembler - *.il -&gt;.exe or .dll</li>
-<li>ResX - ResXToResources.exe .resx -&gt; .resources</li>
-<li>al - assembly linker (.dll) -&gt;</li>
-<li>Signcode - .exe + keys -&gt; .exe</li>
-<li>Resgen - .properties -&gt; .resources</li>
-<li>Type Library Exporter (TlbExp.exe) .dll -&gt; .tlb</li>
-<li>TlbImp.exe Type Library Importer </li>
-<li>RegAsm.exe Assembly Registration Tool .dll -&gt; .reg | registration</li>
-</ol>
-
-<h2>Ant Wrapper for net tasks</h2>
-
-Rarely used .net command line tools can be invoked manually. The key tasks
-to address are the common steps in a build process and those which benefit
-from the file pattern matching function. 
-
-<p>
-
-The esoteric tasks can then supported on demand by those who need them. 
-The initial .net tasks should provide a foundation for that demand creation 
-to be simple. </p>
-
-<h2>Plan</h2>
-
-<ol>
-
-<li>code up C sharp task and distribute for feedback &amp; identify possible
-aid</li>
-<li>Use for a real end to end development task</li>
-<li>Add the next task I need (whatever that is)</li>
-<li>Refactor to produce a base class for .net tasks</li>
-<li>Leave it other people write all the other tasks</li>
-</ol>
-
-<h2>Risks</h2>
-<ul>
-<li>
-The .net SDK is unstable; the next builds will change the commands, arguments 
-and behaviours. Probability: 100%. Impact: 2 days.</li>
-<li>Portable tasks turn out to be harder than envisaged 
- (=reworking if/when non Win32 .net build tools appear)</li>
-
-</ul>
-
-<hr>
-<h2>Using Ant in .net projects</h2>
-
-To use the net tasks one needs
-<ul>
-
-<li> A Windows box (or any other platform which supports the .net build tools)</li>
-
-<li> JavaVM - Java1.1 or later; Java1.3 recommended.</li>
-
-<li> Ant downloaded and the environment and path variables set up so 
-that typing 'ant' invokes ant via a batch file.</li>
-
-<li> An XML parser for ant. The usual distributions include an appropriate 
-version crimson.jar and jaxp.jar.</li>
-
-<li> the .net tasks archive (dotnettasks.jar) included in the
- ant\lib directory</li>
-
-<li> The .net sdk installed with the binaries on the path. (Test: type CSC)</li>
-
-<li> A build.xml file to describe the build process</li>
-</ul>
-
-<hr>
-<h2> Change Log </h2>
-
-<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. 
-
-<hr>
-<h2>Task: CSC</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 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>
-
-<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 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>
-
-
-<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) or &quot;false&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">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 beta1, 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">outputFile</td>
-    <td valign="top">filename of output</td>
-    <td valign="top">&quot;example.exe&quot;</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;
-        outputFile=&quot;NetApp.exe&quot;
-        /&gt;   
-</pre>
-<hr>
-<h2> Task: ilasm </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>
-<hr>
-<p align="center">Copyright &copy; 2000 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 81d4f6b..0000000
--- a/docs/manual/OptionalTasks/ejb.html
+++ /dev/null
@@ -1,1649 +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 (<a href="mailto:conor@cortexebusiness.com.au">conor@cortexebusiness.com.au</a>)</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>
-<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>
-</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 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
-                     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>
-</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>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 please 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 1ef7811..0000000
--- a/docs/manual/OptionalTasks/ftp.html
+++ /dev/null
@@ -1,259 +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; 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">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 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 75ae0e5..0000000
--- a/docs/manual/OptionalTasks/junit.html
+++ /dev/null
@@ -1,434 +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>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 &quot;on&quot;, &quot;off&quot; and
-      &quot;withOutAndErr&quot; - &quot;withOutAndErr&quot; is the same
-      as &quot;on&quot; but also includes the output of the test
-      as written to System.out and System.err.</td>
-    <td align="center" valign="top">No, default is "off"</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 test
-       run.</td>
-    <td align="center" valign="top">No, default is "off"</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 "off"</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 "on."</td>
-  </tr>
-  <tr>
-    <td valign="top">timeout</td> 
-    <td valign="top">Cancel the individual tests if the don'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">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">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 &quot;java&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>
-  <tr>
-    <td valign="top">newenvironment</td>
-    <td valign="top">Do not propagate old environment when new
-      environment variables are specified.  Ignored if fork is
-      disabled.</td>
-    <td align="center" valign="top">No, default is &quot;false&quot;.</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 &quot;true&quot;.</td>
-  </tr>
-</table>
-
-<h3><a name="nested">Nested Elements</a></h3>
-
-<p><code>junit</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>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;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).
-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. See the
-description in the section about 
-<a href="../CoreTasks/exec.html#env">exec</a></p>
-
-<p>Settings will be ignored if fork 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
-usefile attribute to false, 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 emit plain text.  The formatter named
-&quot;brief&quot; will only print detailed information for testcases
-that failed, while &quot;plain&quot; 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>
-
-<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
-      &quot;xml&quot;, &quot;plain&quot; or &quot;brief&quot;).</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 classname 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 true.</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 &lt;junit&gt;.</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 &lt;junit&gt;.</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 &lt;junit&gt;</td> 
-    <td align="center" valign="top">No, default is "on."</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 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-name</code> using 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 &lt;junit&gt;.</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 &lt;junit&gt;</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 &lt;junit&gt;</td> 
-    <td align="center" valign="top">No, default is "on."</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 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 <b>not</b> 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 single 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>.</p>
-
-<p>For each matching file in the directory <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-<em>name</em>.txt</code> and written to <code>${reports.tests}</code>.</p>
-
-<p>By using the errorProperty and failureProperty 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 filtertrace attribute condenses error and failure stack traces before reporting them.
-It works with the plain and xml formatters.  It filters out 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> 
-<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 213da3f..0000000
--- a/docs/manual/OptionalTasks/junitreport.html
+++ /dev/null
@@ -1,97 +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.
-<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 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 3d49e29..0000000
--- a/docs/manual/OptionalTasks/maudit.html
+++ /dev/null
@@ -1,128 +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>
-<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 f28c184..0000000
--- a/docs/manual/OptionalTasks/netrexxc.html
+++ /dev/null
@@ -1,277 +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>
-
-<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</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">Yes</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 da132d7..0000000
--- a/docs/manual/OptionalTasks/perforce.html
+++ /dev/null
@@ -1,557 +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>
-
-<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 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/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/starteam.html b/docs/manual/OptionalTasks/starteam.html
deleted file mode 100644
index 2e2515d..0000000
--- a/docs/manual/OptionalTasks/starteam.html
+++ /dev/null
@@ -1,803 +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">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">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">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 "true".</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">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 view 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">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>
\ No newline at end of file
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 03dfd34..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 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 2d0cbea..0000000
--- a/docs/manual/OptionalTasks/vss.html
+++ /dev/null
@@ -1,542 +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>
- </ul>
-<p>2001/04/29</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>
-</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>
-
-<p align="center">Copyright &copy; 2001 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 8b8052a..0000000
--- a/docs/manual/OptionalTasks/xmlvalidate.html
+++ /dev/null
@@ -1,102 +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 crimson SAX2 parser implementation by default, 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. (default: crimson).</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/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 2e2997b..0000000
--- a/docs/manual/conceptstypeslist.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>Concepts and Types</h3>
-<a href="sysclasspath.html">build.sysclasspath</a><br>
-<a href="CoreTasks/common.html">Common Attributes</a><br>
-<a href="CoreTypes/description.html">Description Type</a><br>
-<a href="dirtasks.html">Directory-based Tasks</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/filterset.html">Filterset</a><br>
-<a href="CoreTypes/patternset.html">Patternset</a><br>
-
-</body>
-</html>
diff --git a/docs/manual/coretasklist.html b/docs/manual/coretasklist.html
deleted file mode 100644
index 17cbc6a..0000000
--- a/docs/manual/coretasklist.html
+++ /dev/null
@@ -1,82 +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/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/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/cvspass.html">CVSPass</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/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/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/style.html">Style</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/zip.html">Zip</a><br>
-</body>
-</html>
diff --git a/docs/manual/cover.html b/docs/manual/cover.html
deleted file mode 100644
index 08df8b9..0000000
--- a/docs/manual/cover.html
+++ /dev/null
@@ -1,25 +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="../artwork/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 Apache Ant. 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. </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 7c48a63..0000000
--- a/docs/manual/credits.html
+++ /dev/null
@@ -1,48 +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>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>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 (<a href="mailto:conor@cortexebusiness.com.au">conor@cortexebusiness.com.au</a>)</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 e9c66af..0000000
--- a/docs/manual/develop.html
+++ /dev/null
@@ -1,255 +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. The type of the attribute can be:
-<ul>
-<li>
-<code>String</code>
-</li>
-<li>
-any primitive type (they are converted for you from their String-representation
-in the buildfile)
-</li>
-<li>
-boolean - your method will be passed the value
-<i>true</i> if the value specified in the buildfile is one of <code>true</code>,
-<code>yes</code>, or <code>on</code>)
-</li>
-<li>
-<code>Class</code>
-</li>
-<li>
-<code>File</code>
-(in which case the value of the attribute is interpreted relative to the
-project's basedir)
-</li>
-<li>
-any other type that has a constructor with a single
-<code>String</code> argument
-</li>
-</ul>
-</li>
-<li>If your task has enumerated attributes, you should consider using
-a subclass of <code>org.apache.tools.ant.types.EnumeratedAttribute</code>
-as an argument
-to your setter method. See
-<code>org/apache/tools/ant/taskdefs/FixCRLF.java</code> for
-an example.</li>
-<li>If the task should support character data, write a <code>public void
-addText(String)</code> method.</li>
-<li>For each nested element, write a <i>create</i> or <i>add</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 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 method
-must begin with <code>add</code>, followed by the element name.</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><code>execute()</code> 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>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 82efc77..0000000
--- a/docs/manual/developlist.html
+++ /dev/null
@@ -1,21 +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>
-
-</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/install.html b/docs/manual/install.html
deleted file mode 100644
index 332516e..0000000
--- a/docs/manual/install.html
+++ /dev/null
@@ -1,369 +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 can be downloaded from <a
-href="http://jakarta.apache.org/builds/ant/release/v1.4.1/bin/">
-http://jakarta.apache.org/builds/ant/release/v1.4.1/bin/</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>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<!-- and optional depend task -->.</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 aba880d..0000000
--- a/docs/manual/listeners.html
+++ /dev/null
@@ -1,297 +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%">BuildListener</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 XmlLogger.file property if present.</p>
-
-<blockquote>
-
-<p><code>ant -listener org.apache.tools.ant.XmlLogger</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 a3677e6..0000000
--- a/docs/manual/optionaltasklist.html
+++ /dev/null
@@ -1,62 +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/script.html">Script</a><br>
-<a href="OptionalTasks/sound.html">Sound</a><br>
-<a href="OptionalTasks/sos.html">SourceOffSite</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 4091a0f..0000000
--- a/docs/manual/platform.html
+++ /dev/null
@@ -1,58 +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>
-
-<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 f4a785c..0000000
--- a/docs/manual/running.html
+++ /dev/null
@@ -1,157 +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
-  -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>
-<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 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 b061797..0000000
--- a/docs/manual/tasksoverview.html
+++ /dev/null
@@ -1,1039 +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="#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="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="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="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/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="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">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/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="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/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/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="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>, and
-     <i>vsscheckout</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 40d4555..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 Troubeshooting</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 b6d9f58..0000000
--- a/docs/manual/using.html
+++ /dev/null
@@ -1,496 +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">Yes</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>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.</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 &quot;init&quot;.</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>
-
-
-<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 "task1" 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/fileset.html">FileSet</a>s can be specified via
-nested <code>&lt;fileset&gt;</code> elements. 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;/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, followed
-by the <code>classes</code> directory.</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 113b32c..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;&nbsp;&nbsp;<a href="using.html#projects">Projects</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="using.html#targets">Targets</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="using.html#tasks">Tasks</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="using.html#properties">Properties</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="using.html#built-in-props">Built-in Properties</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="using.html#example">Example Buildfile</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="using.html#filters">Token Filters</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="using.html#path">Path-like Structures</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="using.html#arg">Command-line Arguments</a><br>
-&nbsp;&nbsp;&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 13f097b..0000000
--- a/docs/problems.html
+++ /dev/null
@@ -1,439 +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">
-  <meta name="email" value="conor@apache.org">
-        
-      <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="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="./artwork/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
-              <code>-debug</code> flag rather than
-              <code>-verbose</code>.
-              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
-              <code>-logfile &lt;filename&gt;</code> 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 <code>ant-user</code> 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 <code>ant-dev</code> mailing
-            list. Once you have a fix for the problem, you may submit
-            the fix as a <i>patch</i> to either the <code>ant-dev</code> 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
-            <code>ant-dev</code> mailing list, prefix "[PATCH]"
-            to your message subject. Please include any relevant bug numbers.
-            Patch files should be created with the <code>-u</code>
-            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 713a2c5..0000000
--- a/docs/projects.html
+++ /dev/null
@@ -1,650 +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="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="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="./artwork/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 274efcb..0000000
--- a/docs/resources.html
+++ /dev/null
@@ -1,1028 +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="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="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="./artwork/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>
-                    </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="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>
-                    </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 4afb50d..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 crimson.jar from the 1.1.3 release of Apache
-Crimson.  For more information or newer releases see
-<http://xml.apache.org/crimson/>.
-
diff --git a/lib/crimson.jar b/lib/crimson.jar
deleted file mode 100644
index 2ad5852..0000000
--- a/lib/crimson.jar
+++ /dev/null
Binary files differ
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/proposal/anteater/README b/proposal/anteater/README
deleted file mode 100644
index 4fc1737..0000000
--- a/proposal/anteater/README
+++ /dev/null
@@ -1,14 +0,0 @@
-README for Ant(Eater)
----------------------------------------------------------------------------------
-
-Execution:
-
-    ant [args] target
-    
-Args:
-
-    -help
-    -quiet
-    -verbose
-    -taskpath [path]
-    -antfile [file]
\ No newline at end of file
diff --git a/proposal/anteater/bootstrap/Bootstrap.java b/proposal/anteater/bootstrap/Bootstrap.java
deleted file mode 100644
index 288fce1..0000000
--- a/proposal/anteater/bootstrap/Bootstrap.java
+++ /dev/null
@@ -1,115 +0,0 @@
-// -------------------------------------------------------------------------------
-// Copyright (c)2000 Apache Software Foundation
-// -------------------------------------------------------------------------------
-
-import java.io.*;
-import java.util.*;
-import java.util.zip.*;
-
-/**
- * Quick and dirty single class bootstrap utility for getting Ant off
- * the ground when in need. To use, compile this file in the directory
- * where the source code is in the repository, then execute it. That's
- * it.<p>
- *
- * No pretense is made that this is an elegant peice of code. This code
- * only exists to do a ground zero build of Ant. Any other building of
- * Ant should be done with itself whenever possible.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- * @author Conor MacNeill (conor@m64.com)
- */
-public class Bootstrap {
-    
-    /**
-     * Command line entry point. This is the first part of the bootstrap
-     * where we go and set up the environment and generally do what is
-     * necessary to set up for Bootstrapping.
-     */
-    public static void main(String[] args) throws Exception {
-      
-        String[] command;
-        String classpath = null;
-      
-        // check to see if we have a compiler on the classpath. Right now
-        // we're just checking for the old compiler, but will want to check
-        // for the new compiler and use it if it exists. Later.
-        try {
-            Class clazz = Class.forName("sun.tools.javac.Main");
-        } catch (ClassNotFoundException cnfe) { 
-            String javaHome = System.getProperty("java.home");
-            if (javaHome.endsWith("jre")) {
-                javaHome = javaHome.substring(0, javaHome.length() - 4);
-            }
-            // XXX should check if this exists and bail out if it doesn't
-            classpath = javaHome + "/lib/tools.jar" + File.pathSeparator + ".";
-        }
-        
-        // XXX really should check to see if compiling the bootstrap is necessary. :)
-        
-        System.out.println("Compiling Bootstrap2");
-        if (classpath == null) {
-            command = new String[] {"javac", "./Bootstrap2.java"};
-        } else {
-            command = new String[] {"javac", "-classpath", classpath, 
-                                    "./Bootstrap2.java"};
-        }
-        runCommand(command);
-        
-        System.out.println("Running Bootstrap2");
-        if (classpath == null) {
-            command = new String[] {"java", "Bootstrap2"};
-        } else {
-            command = new String[] {"java", "-cp", classpath, "Bootstrap2"};
-        }
-        runCommand(command, args);
-    }
-    
-    /** 
-     * Utility method for execing processes
-     */
-    static void runCommand(String[] command) throws IOException {
-    
-        Runtime runtime = Runtime.getRuntime();
-        Process process = runtime.exec(command);
-            
-        // echo output from process
-            
-        InputStream in = process.getInputStream();
-        byte[] buf = new byte[80];
-        int count = 0;
-        count = in.read(buf, 0, buf.length);
-        while (count != -1) {
-            System.out.write(buf, 0, count);
-            count = in.read(buf, 0, buf.length);
-        }
-            
-        in = process.getErrorStream();
-        count = in.read(buf, 0, buf.length);          
-        if (count > 0) {
-            System.out.println();
-            System.out.println("Error Stream Output:");
-             
-            while (count != -1) {
-                System.out.write(buf, 0, count);
-                count = in.read(buf, 0, buf.length);
-            }
-        }
-    }
-    
-    /**
-     * Utility method for running processes that let some additional args
-     * be specified.
-     */
-    static void runCommand(String[] command, String[] addtlArgs) throws IOException {
-        String[] newCommand = new String[command.length + addtlArgs.length];
-        for (int i = 0; i < command.length; i++) {
-            newCommand[i] = command[i];
-        }
-        for (int i = 0; i < addtlArgs.length; i++) {
-            newCommand[command.length + i] = addtlArgs[i];
-        }
-        runCommand(newCommand);
-    }
-} 
- 
diff --git a/proposal/anteater/bootstrap/Bootstrap2.java b/proposal/anteater/bootstrap/Bootstrap2.java
deleted file mode 100644
index a755dc9..0000000
--- a/proposal/anteater/bootstrap/Bootstrap2.java
+++ /dev/null
@@ -1,285 +0,0 @@
-// -------------------------------------------------------------------------------
-// Copyright (c)2000 Apache Software Foundation
-// -------------------------------------------------------------------------------
-
-import java.io.*;
-import java.util.*;
-import java.util.jar.*;
-import java.util.zip.*;
-
-/**
- * Second stage bootstrap. This is where the majority of the work happens.
- *
- * @author James Duncan Davidson (duncan@apache.org);
- */
-public class Bootstrap2 {
-   
-    private static String base = "../";
-    private static String crimsonSources = "../../../xml-crimson/src"; // relative to base
-    private static String[] modules = new String[]{"copy", "echo", "jar", "javac", "buildtarget"};
-
-    /**
-     * Command line entry point.
-     */
-    public static void main(String[] args) throws Exception {
-    
-        long startTime = System.currentTimeMillis();
-    
-        System.out.println("Starting Bootstrap2....");
-
-        // ------------------------------------------------------------
-        // first create dirs that we need for strapping
-        // ------------------------------------------------------------
-
-        mkdir(base + "bootstrap/temp");
-        mkdir(base + "bootstrap/temp/crimson");
-        mkdir(base + "bootstrap/temp/main");
-        mkdir(base + "bootstrap/temp/tasks");
-        mkdir(base + "bootstrap/temp/taskjars");
-        
-        for (int i = 0; i < modules.length; i++) {
-            mkdir(base + "bootstrap/temp/tasks/" + modules[i]);
-        }
-      
-        // ------------------------------------------------------------
-        // build crimson, but only if it hasn't been built yet since
-        // 127 class files takes more seconds than I like to wait.
-        // ------------------------------------------------------------       
-        
-        if (!(new File(base + "bootstrap/temp/crimson/javax").exists())) {
-            Vector v1 = getSources(base + crimsonSources);
-            doCompile(base + "bootstrap/temp/crimson", v1);
-        }
-        
-        // ------------------------------------------------------------
-        // build the main thing
-        // ------------------------------------------------------------        
-        
-        Vector v2 = getSources(base + "source/main");
-        doCompile(base + "bootstrap/temp/main", v2);
-        
-        // ------------------------------------------------------------
-        // now build each of the needed peices into their
-        // areas within the strapping area
-        // ------------------------------------------------------------
-
-        for (int i = 0; i < modules.length; i++) {
-            buildModule(modules[i]);
-        }
-
-        // ------------------------------------------------------------
-        // now, set classpaths and launch an Ant build to
-        // have Ant build itself nicely
-        // ------------------------------------------------------------
-
-        System.out.println();
-        System.out.println("-------------------------------------------");
-        System.out.println("STARTING REAL BUILD");
-        System.out.println("-------------------------------------------");
-        System.out.println();     
-        
-        String[] cmdarray = new String[10];
-        cmdarray[0] = "java";
-        cmdarray[1] = "-cp";
-        cmdarray[2] = base + "bootstrap/temp/main" + File.pathSeparator +
-                      base + "bootstrap/temp/crimson";
-        cmdarray[3] = "org.apache.ant.cli.Main";
-        cmdarray[4] = "-taskpath";
-        cmdarray[5] = base + "bootstrap/temp/taskjars";
-        cmdarray[6] = "-buildfile";
-        cmdarray[7] = base + "source/main.ant";
-        cmdarray[8] = "-target"; 
-        cmdarray[9] = "default";
-        
-        Bootstrap.runCommand(cmdarray, args);
-        
-        System.out.println();
-        System.out.println("-------------------------------------------");
-        System.out.println("FINISHED WITH REAL BUILD");
-        System.out.println("-------------------------------------------");
-        System.out.println();
-        
-        // ------------------------------------------------------------
-        // Remove Temporary classes
-        // ------------------------------------------------------------
-
-        // delete(tempDirName);
-
-        // ------------------------------------------------------------
-        // Print Closer
-        // ------------------------------------------------------------
-
-        long endTime = System.currentTimeMillis();
-        long elapsd = endTime - startTime;
-        System.out.println("Bootstrap Time: " + (elapsd/1000) + "." + (elapsd%1000) + 
-                           " seconds");
-    }
-
-    private static void mkdir(String arg) {
-        File dir = new File(arg);
-        if (dir.exists() && !dir.isDirectory()) {
-            System.out.println("Oh, horrors! Dir " + arg + " " +
-                               "doesn't seem to be a dir... Stop!");
-            System.exit(1);
-        }
-        if (!dir.exists()) {
-            System.out.println("Making dir: " + arg);
-            dir.mkdir();
-        }
-    }
-
-    private static void buildModule(String arg) {
-        System.out.println("Building " + arg);
-     
-        // get all sources and hand them off to the compiler to
-        // build over into destination
-
-        Vector v = getSources(base + "source/coretasks/" + arg);
-        if (v.size() > 0) {
-            doCompile(base + "bootstrap/temp/tasks/" + arg, v);
-        }
-        
-
-        // move taskdef.properties for the module
-
-        copyfile(base + "source/coretasks/" + arg + "/taskdef.properties",
-                 base + "bootstrap/temp/tasks/" + arg + "/taskdef.properties");
-                 
-        // jar up tasks
-        try {
-            jarDir(new File(base + "bootstrap/temp/tasks/" + arg), 
-                new File(base + "bootstrap/temp/taskjars/" + arg + ".jar"));
-        } catch(IOException ioe) {
-            System.out.println("problem jar'ing: " + arg);
-        }
-    }
-
-    private static Vector getSources(String arg) {
-
-        File sourceDir = new File(arg);
-        
-        Vector v = new Vector();
-        scanDir(sourceDir, v, ".java");
-        return v;
-    }
-
-    private static void jarDir(File dir, File jarfile) throws IOException {
-        String[] files = dir.list();
-        if (files.length > 0) {
-            System.out.println("Jaring: " + jarfile);        
-            
-            FileOutputStream fos = new FileOutputStream(jarfile);
-            JarOutputStream jos = new JarOutputStream(fos, new Manifest());
-            jarDir(dir, "", jos);
-            jos.close();      
-        }
-    }
-    
-    private static void jarDir(File dir, String prefix, JarOutputStream jos) throws 
-        IOException 
-    {
-        String[] files = dir.list();
-        for (int i = 0; i < files.length; i++) {
-            File f = new File(dir, files[i]);
-            if (f.isDirectory()) {
-                String zipEntryName;
-                if (!prefix.equals("")) {
-                    zipEntryName = prefix + "/" + files[i];
-                } else {
-                    zipEntryName = files[i];
-                }
-                ZipEntry ze = new ZipEntry(zipEntryName);
-                jos.putNextEntry(ze);
-                jarDir(f, zipEntryName, jos);
-            } else {
-                String zipEntryName;
-                if (!prefix.equals("")) {
-                    zipEntryName = prefix + "/" + files[i];
-                } else {
-                    zipEntryName = files[i];
-                }
-                ZipEntry ze = new ZipEntry(zipEntryName);
-                jos.putNextEntry(ze);
-                FileInputStream fis = new FileInputStream(f);
-                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();
-            }
-        }
-    }
-
-    private static void scanDir(File dir, Vector v, String endsWith) {
-        String[] files = dir.list();
-        if (files == null) {
-            return;
-        }
-        for (int i = 0; i < files.length; i++) {
-            File f = new File(dir, files[i]);
-            if (f.isDirectory()) {
-                scanDir(f, v, endsWith);
-            } else {
-                if (files[i].endsWith(endsWith)) {
-                    v.addElement(f);
-                }
-            }
-        }
-    }
-
-    private static void doCompile(String dest, Vector sources) {
-        System.out.println("   Compiling " + sources.size() + " files to " + dest);
-        
-        // XXX This should be more forgiving about compiling wherever
-        // under whatever compiler, but this works so...
-        
-        sun.tools.javac.Main compiler = new sun.tools.javac.Main(System.out, 
-                                                                 "javac");        
-        String[] args = new String[sources.size() + 4];
-        args[0] = "-classpath";
-        args[1] = base + "bootstrap/temp/main" + File.pathSeparator +  
-                  base + "bootstrap/temp/crimson";
-        args[2] = "-d";
-        args[3] = dest;
-        for (int i = 0; i < sources.size(); i++) {
-            args[4+i] = ((File)sources.elementAt(i)).toString();
-        }
-        
-        // System.out.print("javac ");
-        // for (int i = 0; i < args.length; i++) {
-        //     System.out.print(args[i] + " ");
-        // }
-        // System.out.println();
-        
-        compiler.compile(args);
-    }
-
-    private static void copyfile(String from, String dest) {
-        File fromF = new File(from);
-        File destF = new File(dest);
-        if (fromF.exists()) {
-            System.out.println("   Copying " + from);
-            try {
-                FileInputStream in = new FileInputStream(fromF);
-                FileOutputStream out = new FileOutputStream(destF);
-                byte[] buf = new byte[1024 * 16];
-                int count = 0;
-                count = in.read(buf, 0, buf.length);
-                if (count != -1) {
-                    out.write(buf, 0, count);
-                    count = in.read(buf, 0, buf.length);
-                }
-                
-                in.close();
-                out.close();
-            } catch (IOException ioe) {
-                System.out.println("OUCH: " + from);
-                System.out.println(ioe);
-            }
-        }
-    }
-}
- 
\ No newline at end of file
diff --git a/proposal/anteater/bootstrap/README b/proposal/anteater/bootstrap/README
deleted file mode 100644
index 95f6fd6..0000000
--- a/proposal/anteater/bootstrap/README
+++ /dev/null
@@ -1,51 +0,0 @@
-BOOTSTRAP FOLDER README
----------------------------------------------------------------------
-
-The utilities provided here are used by the developers of Ant to 
-bootstrap builds of Ant and will be used by the nightly build process
-to build Ant from a zero state.
-
-That said, there is no reason for most folks -- even hard core Ant
-developers -- to use the files here on a regular basis. You should
-really have the latest stable version of Ant installed somewhere so
-that you can easily build Ant using itself. Check out the 
-installation guidelines in the documentation for suggestions on how
-Ant can be installed as a full time program of your system. 
-
-HOW TO USE
-
-So, you really want to use the bootstrap facilities instead of just
-downloading a build from somewhere? Ok. Here's how it works:
-
-  * Make sure that sun.tools.javac.Main is on your classpath. 
-    Sometimes it is, sometimes it isn't -- it depends on the JDK
-    installed on your machine. You can do a quick check using
-    the 'javap sun.tools.javac.Main' command to see if it is.
-
-  * Make sure that you have xml-crimson checked out next to
-    the jakarta-ant workspace so that the Bootstrap can find
-    this necessary code.
-
-  * Compile Bootstrap.java. You should end up with Bootstrap.class
-    and maybe a few other classes (depending).
-    
-  * Execute the Bootstrap class.
-  
-How this will work in practice is:
-
-  % javac Bootstrap.java
-  % java Bootstrap
-
-The Bootstrap class will grind out a preliminary build in the directory
-'temp/' which will be placed in this directory, then use that build to
-build a real copy of Ant into '../Build' using Ant's own makefile. After
-doing this, the Boostrap class will remove the intermediate build in
-the 'temp/' directory.
-
-HISTORICAL NOTE
-
-The Bootstrap class is somewhat the same rough hack as the first sketch
-of Ant itself -- a proof of concept that a Java based build system
-could work out halfway decently. Of course, Ant has expanded much past
-the capabilities of this, but this little start serves as a useful
-tool to bootstrap builds.
\ No newline at end of file
diff --git a/proposal/anteater/source/coretasks/buildtarget/org/apache/ant/buildtarget/BuildTargetTask.java b/proposal/anteater/source/coretasks/buildtarget/org/apache/ant/buildtarget/BuildTargetTask.java
deleted file mode 100644
index cead59f..0000000
--- a/proposal/anteater/source/coretasks/buildtarget/org/apache/ant/buildtarget/BuildTargetTask.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.apache.ant.buildtarget;
-
-import org.apache.ant.*;
-
-/**
- * A simple task that builds a target if a property is set to true
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class BuildTargetTask extends AbstractTask {
-    
-    // -----------------------------------------------------------------
-    // PRIVATE DATA MEMBERS
-    // -----------------------------------------------------------------
-    
-    /**
-     * Data to echo
-     */
-    private String ifProperty;
-    
-    /**
-     * Target to execute
-     */
-    private String targetName;
-    
-    // -----------------------------------------------------------------
-    // PUBLIC METHODS
-    // -----------------------------------------------------------------    
-    
-    /**
-     * Executes this task.
-     */
-    public boolean execute() throws AntException {
-        // XXX should really check internal state before proceeding! Target
-        // has to be set...
-        
-        // XXX oh, and we should really check to see if the target exists
-        // and fail out if it doesn't. :)
-        
-        if (ifProperty != null) {
-            String ifPropertyValue = project.getProperty(ifProperty);
-            if (ifPropertyValue.equals("true")) {
-                project.startBuild(targetName);
-                return true;
-            } else {
-                return true;
-            }
-        } else {
-            project.startBuild(targetName);
-            return true;
-        }
-    } 
-    
-    /**
-     * Sets the property that will be examined
-     */
-    public void setIf(String ifProperty) {
-        this.ifProperty = ifProperty;
-    }
-    
-    /**
-     * Sets the target to be executed
-     */
-    public void setTarget(String targetName) {
-        this.targetName = targetName;
-    }
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/coretasks/buildtarget/taskdef.properties b/proposal/anteater/source/coretasks/buildtarget/taskdef.properties
deleted file mode 100644
index ecc4506..0000000
--- a/proposal/anteater/source/coretasks/buildtarget/taskdef.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# taskdef.properties for Echo task
-
-tasks=buildtarget
-task.buildtarget.class=org.apache.ant.buildtarget.BuildTargetTask
\ No newline at end of file
diff --git a/proposal/anteater/source/coretasks/echo/org/apache/ant/echo/EchoTask.java b/proposal/anteater/source/coretasks/echo/org/apache/ant/echo/EchoTask.java
deleted file mode 100644
index f4ce40d..0000000
--- a/proposal/anteater/source/coretasks/echo/org/apache/ant/echo/EchoTask.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.apache.ant.echo;
-
-import org.apache.ant.*;
-
-/**
- * A very simple task that takes a bit of text and echos it back out
- * when it is executed. This is useful for troubleshooting properties
- * in buildfiles, letting the user know that something is going to happen
- * and as a very simple example that can be copied to create other tasks.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class EchoTask extends AbstractTask {
-    
-    // -----------------------------------------------------------------
-    // PRIVATE DATA MEMBERS
-    // -----------------------------------------------------------------
-    
-    /**
-     * Data to echo
-     */
-    private String text;
-    
-    // -----------------------------------------------------------------
-    // PUBLIC METHODS
-    // -----------------------------------------------------------------    
-    
-    /**
-     * Executes this task.
-     */
-    public boolean execute() throws AntException {
-        project.getFrontEnd().writeMessage(text);
-        return true;
-    } 
-    
-    /**
-     * Sets the text that this task will echo.
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/coretasks/echo/taskdef.properties b/proposal/anteater/source/coretasks/echo/taskdef.properties
deleted file mode 100644
index 8949070..0000000
--- a/proposal/anteater/source/coretasks/echo/taskdef.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# taskdef.properties for Echo task
-
-tasks=echo
-task.echo.class=org.apache.ant.echo.EchoTask
\ No newline at end of file
diff --git a/proposal/anteater/source/main.ant b/proposal/anteater/source/main.ant
deleted file mode 100644
index d56ee63..0000000
--- a/proposal/anteater/source/main.ant
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Comment outside of project -->
-
-<project name="Ant" default="default">
-
-  <!-- Comment inside of project -->
-
-  <description>Primary buildfile for building Ant itself</description>
-
-  <property name="foo" value="true"/>
-
-  <target name="default" depends="main">
-    <echo text="Default Target is Executing"/>
-    <buildtarget target="main" if="foo"/>
-  </target>
-
-  <target name="main">
-    <echo text="Main Target is Executing"/>
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/proposal/anteater/source/main/org/apache/ant/AbstractTask.java b/proposal/anteater/source/main/org/apache/ant/AbstractTask.java
deleted file mode 100644
index a4cfc2e..0000000
--- a/proposal/anteater/source/main/org/apache/ant/AbstractTask.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.apache.ant;
-
-import java.io.*;
-import java.util.*;
-import java.lang.reflect.*;
-import java.beans.*;
-
-/**
- * Superclass of all Tasks. All tasks extend from this.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public abstract class AbstractTask {
-    
-    // -----------------------------------------------------------------
-    // PROTECTED DATA MEMBERS
-    // -----------------------------------------------------------------
-    
-    /**
-     *
-     */
-    protected Project project;
-    
-    // -----------------------------------------------------------------
-    // ABSTRACT PUBLIC METHODS
-    // -----------------------------------------------------------------     
-    
-    /**
-     *
-     */
-    public abstract boolean execute() throws AntException;
-    
-    // -----------------------------------------------------------------
-    // PUBLIC METHODS
-    // -----------------------------------------------------------------  
-    
-    /**
-     * Used by the system to set the attributes which then get reflected
-     * into the particular implementation class
-     */
-    public void setAttributes(Hashtable attributes) {
-        Class clazz = this.getClass();
-        BeanInfo bi;
-        try {
-            bi = Introspector.getBeanInfo(clazz);
-        } catch (IntrospectionException ie) {
-            System.out.println("Can't reflect on: " + clazz);
-            // XXX exception out
-            return;
-        }
-        PropertyDescriptor[] pda = bi.getPropertyDescriptors();
-        for (int i = 0; i < pda.length; i++) {
-            PropertyDescriptor pd = pda[i];
-            String property = pd.getName();
-            Object o = attributes.get(property);
-            if (o != null) {
-                String value = (String)o;
-                Method setMethod = pd.getWriteMethod();
-                if (setMethod != null) {
-                    Class[] ma = setMethod.getParameterTypes();
-                    if (ma.length == 1) {
-                        Class c = ma[0];
-                        if (c.getName().equals("java.lang.String")) {
-                            try {
-                                setMethod.invoke(this, new String[] {value});
-                            } catch (Exception e) {
-                                // XXX bad bad bad -- narrow to exact exceptions
-                                System.out.println("OUCH: " + e);
-                                // XXX exception out.
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-    
-    /**
-     * Used by system to set the project.
-     */  
-    public void setProject(Project project) {
-        this.project = project;
-    }
-  
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/main/org/apache/ant/AntException.java b/proposal/anteater/source/main/org/apache/ant/AntException.java
deleted file mode 100644
index 16d7a69..0000000
--- a/proposal/anteater/source/main/org/apache/ant/AntException.java
+++ /dev/null
@@ -1,138 +0,0 @@
-// -------------------------------------------------------------------------------
-// Copyright (c)2000 Apache Software Foundation
-// -------------------------------------------------------------------------------
-
-package org.apache.ant;
-
-/**
- * Signals a problem while setting up or executing a build.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class AntException extends Exception {
-
-    // -----------------------------------------------------------------
-    // PRIVATE MEMBERS
-    // -----------------------------------------------------------------    
-    
-    /**
-     * The cause of this exception.
-     */
-    private Throwable cause;
-    
-    /**
-     * Project within which this exception occured, if applicable.
-     */
-    private Project project;
-    
-    /**
-     * Target within which this exception occurred, if applicable.
-     */
-    private Target target;
-    
-    /**
-     * Task within which this exception occurred, if applicable.
-     */
-    private Task task;
-
-    // -----------------------------------------------------------------
-    // CONSTRUCTORS
-    // -----------------------------------------------------------------    
-    
-    /**
-     * Constructs a new AntException with no message.
-     */
-    public AntException() {
-        super();
-    }
-    
-    /**
-     * Constructs a new AntException with the given message.
-     */
-    public AntException(String msg) {
-        super(msg);
-    }
-    
-    /**
-     * Constructs a new AntException with the given message and cause.
-     */
-    public AntException(String msg, Throwable cause) {
-        super(msg);
-        this.cause = cause;
-    }
-    
-    /**
-     * Constructs a new AntException with the given cause and a 
-     * detailed message of (cause==null ? null : cause.toString())
-     */
-    public AntException(Throwable cause) {
-        super(cause==null ? null : cause.toString());
-        this.cause = cause;
-    }
-    
-    // -----------------------------------------------------------------
-    // PUBLIC METHODS
-    // -----------------------------------------------------------------    
-    
-    /**
-     * Returns the cause of this exception.
-     */ 
-    public Throwable getCause() {
-        return cause;
-    }
-    
-    /**
-     * Returns the Project within the scope of which this exception occurred,
-     * if applicable. Otherwise null.
-     */
-    public Project getProject() {
-        return project;
-    }
-    
-    /**
-     * Returns the Target within the scope of which this exception occurred,
-     * if applicable. Otherwise null.
-     */
-    public Target getTarget() {
-        return target;
-    }
-     
-    /**
-     * Returns the Task wihtin the scope of which this exception occurred,
-     * if applicable. Otherwise null.
-     */
-    public Task getTask() {
-        return task;
-    }
-     
-    // -----------------------------------------------------------------
-    // PACKAGE METHODS
-    // -----------------------------------------------------------------    
-    
-    /**
-     * Sets the project within the scope of which this exception occurred.
-     * This method is called by the internal error handling mechanism of
-     * Ant before it is propogated out.
-     */
-    void setProject(Project project) {
-        this.project = project;
-    }
-    
-    /**
-     * Sets the target within the scope of which this exception occurred.
-     * This method is called by the internal error handling mechansim of
-     * Ant before it is propogated out.
-     */
-    void setTarget(Target target) {
-        this.target = target;
-    }
-    
-    /**
-     * Sets the task within the scope of which this exception occurred.
-     * This method is called by the internal error handling mechanism of
-     * Ant before it is propogated out.
-     */
-    void setTask(Task task) {
-        this.task = task;
-    }
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/main/org/apache/ant/AntFrontEnd.java b/proposal/anteater/source/main/org/apache/ant/AntFrontEnd.java
deleted file mode 100644
index 9e30814..0000000
--- a/proposal/anteater/source/main/org/apache/ant/AntFrontEnd.java
+++ /dev/null
@@ -1,103 +0,0 @@
-// -------------------------------------------------------------------------------
-// Copyright (c)2000 Apache Software Foundation
-// -------------------------------------------------------------------------------
-
-package org.apache.ant;
-
-/**
- * Abstract class that lets Ant talk to a front end such as a CLI front end,
- * GUI front end, Servlet front end, or some other front end.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public abstract class AntFrontEnd {
-
-    // -----------------------------------------------------------------
-    // CONSTANTS
-    // -----------------------------------------------------------------    
-    
-    /**
-     * Indicates that an associated message has a low importance.
-     */
-    public static final int MSG_LEVEL_LOW = 1;
-    
-    /**
-     * Indicates that an associated message has a medium importance.
-     */
-    public static final int MSG_LEVEL_MED = 2;
-    
-    /**
-     * Indicates that an associated message has a high importance.
-     */
-    public static final int MSG_LEVEL_HIGH = 3;
-    
-    // -----------------------------------------------------------------
-    // PUBLIC METHODS
-    // -----------------------------------------------------------------    
-
-    /**
-     * Send notification to the FrontEnd that execution has moved into
-     * the scope of a particular project. The default implementation
-     * does nothing. 
-     */
-    public void notifyProjectStart(Project project) {
-    
-    }
-
-    /**
-     * Send notification to the FrontEnd that execution has moved out
-     * of the scope of a particular Project. The default implementation
-     * does nothing.
-     */
-    public void notifyProjectEnd(Project project) {
-    
-    }
-    
-    /**
-     * Send notification to the FrontEnd that execution has moved into
-     * the scope of a particular target. The default implementation does
-     * nothing.
-     */
-    public void notifyTargetStart(Target target) {
-    
-    }
-    
-    /**
-     * Send notification to the FrontEnd that execution has moved out of
-     * the scope of a particular target. The default implementation does
-     * nothing.
-     */
-    public void notifyTargetEnd(Target target) {
-    
-    }
-    
-    /**
-     * Send notification to the FrontEnd that execution has moved into the
-     * scope of a particular task. The default implementation does nothing.
-     */
-    public void notifyTaskStart(Task task) {
-    
-    }
-    
-    /**
-     * Send notification to the FrontEnd that execution has moved out of
-     * the scope of a particular task. The default implementation does
-     * nothing.
-     */
-    public void notifyTaskEnd(Task task) {
-    
-    }
-
-    /**
-     * Writes a message to the front end with a medium importance.
-     */
-    public void writeMessage(String message) {
-        writeMessage(message, MSG_LEVEL_MED);
-    }
-
-    /**
-     * Writes a message to the front end.
-     */
-    public abstract void writeMessage(String message, int level);
-
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/main/org/apache/ant/Project.java b/proposal/anteater/source/main/org/apache/ant/Project.java
deleted file mode 100644
index 63e2d4d..0000000
--- a/proposal/anteater/source/main/org/apache/ant/Project.java
+++ /dev/null
@@ -1,286 +0,0 @@
-// ---------------------------------------------------------------------
-// (c)2000 Apache Software Foundation
-//
-// ---------------------------------------------------------------------
-
-package org.apache.ant;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * In memory container for an Ant project.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class Project {
-
-    // -----------------------------------------------------------------
-    // PRIVATE DATA MEMBERS
-    // -----------------------------------------------------------------
-
-    /**
-     *
-     */
-    //private Ant ant;
-    
-    /**
-     * Base directory of this project. Usually this value is the directory
-     * where the project file was found, but can be different.
-     */
-    private File baseDir;
-    
-    /**
-     *
-     */
-    private String defaultTargetName;
-    
-    /**
-     * Short description of the project.
-     */
-    private String description;
-
-    /**
-     * Front end that this project communicates to.
-     */
-    private AntFrontEnd frontEnd;
-
-    /**
-     * Properties of this project.
-     */
-    private Properties properties = new Properties();
-
-    /**
-     * Parent project to this project, if one exists.
-     */
-    private Project parentProject = null;
-
-    /**
-     *
-     */
-    private String name;
-
-    /**
-     * Hashtable containing all of the targets that are part of this
-     * project. Targets are stored in this hashtable using the name
-     * of the target as the key and the Target object for the target
-     * as the value.
-     */
-    private Hashtable targets = new Hashtable();
-    
-    /**
-     * TaskManager for this project.
-     */
-    private TaskManager taskManager;
-
-    // -----------------------------------------------------------------
-    // CONSTRUCTORS
-    // -----------------------------------------------------------------
-
-    /**
-     * Creates a new Project object with the given FrontEnd and TaskManager
-     */
-    public Project(AntFrontEnd frontEnd, TaskManager taskManager) {
-        this.frontEnd = frontEnd;
-        this.taskManager = taskManager;
-    }
-
-    // -----------------------------------------------------------------
-    // PUBLIC  METHODS
-    // -----------------------------------------------------------------
-
-    /**
-     * Adds a target to this project.
-     */
-    public void addTarget(Target target) {
-        // XXX check out for name, if null, reject!
-        targets.put(target.getName(), target);
-    }
-
-    /**
-     * Returns the base directory of this project.
-     */
-    public File getBaseDir() {
-        return baseDir;
-    }
-
-    /**
-     * Returns the default target for this project, if there is one. Otherwise
-     * it returns null.
-     */
-    public String getDefaultTargetName() {
-        return defaultTargetName;
-    }
-
-    /**
-     * Returns a short description of this project, if any. If not, returns 
-     * null.
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * Gets the front end that is running this project.
-     */
-    public AntFrontEnd getFrontEnd() {
-        return frontEnd;
-    }
-
-    /**
-     * Returns the parent Project object to this Project if a parent
-     * project exists. If there is not a parent Project object, null
-     * is returned.
-     */
-    public Project getParent() {
-        return parentProject;
-    }
-
-    /**
-     * Returns the target identified with the given name. If no target
-     * is known by the given name, then null is returned.
-     */
-    public Target getTarget(String name) {
-        return (Target)targets.get(name);
-    }
-    
-    /**
-     * Gets an exumeration of all the targets that are part of this project.
-     */
-    public Enumeration getTargets() {
-        return targets.elements();
-    }
-    
-    /**
-     * Gets the name of this project.
-     */
-    public String getName() {
-        return name;
-    }
-    
-    /**
-     * Returns the value of a property. Returns null if the property does
-     * not exist.
-     */
-    public String getProperty(String propertyName) {
-        return properties.getProperty(propertyName);
-    }
-    
-    /**
-     *
-     */
-    //public void setAnt(Ant ant) {
-    //    this.ant = ant;
-    //}
-    
-    /**
-     * Sets the base dir for this project.
-     */
-    public void setBaseDir(File dir) {
-        // XXX should check this to make sure it's a dir!
-        baseDir = dir;
-    }
-    
-    /**
-     * Sets the default target for this project.
-     */
-    public void setDefaultTargetName(String targetName) {
-        defaultTargetName = targetName;
-    }
-    
-    /**
-     * Sets the description for this project.
-     */
-    public void setDescription(String description) {
-        this.description = description;
-    }
-    
-    /**
-     * Sets the front end for this project.
-     */
-    public void setFrontEnd(AntFrontEnd frontEnd) {
-        this.frontEnd = frontEnd;
-    }
-    
-    /**
-     * Sets the name of this project.
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Sets a property on this project. If the property is already
-     * set, this method will override it.
-     */
-    public void setProperty(String propertyName, String propertyValue) {
-        properties.put(propertyName, propertyValue);
-    }
-    
-    /**
-     * Starts a build of this project using the default target if one
-     * is set.
-     */
-    public void startBuild() throws AntException {
-        // XXX need to do something if the default target isn't set..
-        // maybe look for target name 'default', then bail?
-        startBuild(defaultTargetName);
-    }
-    
-    /**
-     * Starts a build of this project with the entry point at the given
-     * target.
-     */
-    public void startBuild(String targetName) throws AntException {
-        
-        // notify AntFrontEnd that we are starting a build on a project
-        
-        frontEnd.notifyProjectStart(this);
-        
-        Target target = getTarget(targetName);
-        
-        frontEnd.notifyTargetStart(target);
-        
-        // XXX don't forget to execute dependancies first!
-        
-        Enumeration enum = target.getTasks().elements();
-        while (enum.hasMoreElements()) {
-            Task task = (Task)enum.nextElement();
-            frontEnd.notifyTaskStart(task);
-            try {
-                AbstractTask aTask = taskManager.getTaskInstance(task.getType());
-                aTask.setProject(this);
-                aTask.setAttributes(task.getAttributes());
-                boolean b = aTask.execute();
-                if (!b) {
-                    String msg = "Task " + task.getType() + " failed";
-                    AntException ae = new AntException(msg);
-                    throw ae;
-                }
-            } catch (Exception e) {
-                AntException ae;
-                if (!(e instanceof AntException)) {
-                    ae = new AntException(e);
-                } else {
-                    ae = (AntException)e;
-                }
-                ae.setProject(this);
-                ae.setTarget(target);
-                ae.setTask(task);
-                throw ae;
-            }
-            frontEnd.notifyTaskEnd(task);
-        }
-        
-        // notify frontEnd that we are done
-        frontEnd.notifyTargetEnd(target);
-        frontEnd.notifyProjectEnd(this);
-    }
-    
-    /**
-     * Givens a string representation of this object. Useful for debugging.
-     */
-    public String toString() {
-        return "Project name=" + name;
-    }
-}
diff --git a/proposal/anteater/source/main/org/apache/ant/ProjectBuilder.java b/proposal/anteater/source/main/org/apache/ant/ProjectBuilder.java
deleted file mode 100644
index ea2eb13..0000000
--- a/proposal/anteater/source/main/org/apache/ant/ProjectBuilder.java
+++ /dev/null
@@ -1,307 +0,0 @@
-// -------------------------------------------------------------------------------
-// Copyright (c)2000 Apache Software Foundation
-// -------------------------------------------------------------------------------
-
-package org.apache.ant;
-
-import java.io.*;
-import java.util.*;
-import javax.xml.parsers.*;
-import org.xml.sax.*;
-
-/**
- * Helper class to build Project object trees.
- *
- * XXX right now this class only deals with the primary levels (project/target/task)
- * and nothing else. Also, it only supports attributes....
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class ProjectBuilder {
-        
-    // -----------------------------------------------------------------
-    // PRIVATE MEMBERS
-    // -----------------------------------------------------------------
-    
-    /**
-     *
-     */
-    private AntFrontEnd frontEnd;
-    
-    /**
-     *
-     */
-    private SAXParserFactory parserFactory;
-    
-    /**
-     *
-     */
-    private TaskManager taskManager;
-        
-    // -----------------------------------------------------------------
-    // CONSTRUCTORS
-    // -----------------------------------------------------------------
-   
-   
-    /**
-     * Creates a new project builder that will build projects for the given
-     * Ant.
-     */
-    public ProjectBuilder(AntFrontEnd frontEnd) {
-        this.frontEnd = frontEnd;
-        taskManager = new TaskManager(frontEnd);
-        parserFactory = SAXParserFactory.newInstance();
-        parserFactory.setValidating(false);  
-    }
-    
-    // -----------------------------------------------------------------
-    // PUBLIC METHODS
-    // -----------------------------------------------------------------
-    
-    /**
-     * Builds a project from the given file.
-     */
-    public Project buildFromFile(File file) throws AntException {
-        try {
-            SAXParser parser = parserFactory.newSAXParser();
-            BuilderHandlerBase bhb = new BuilderHandlerBase();
-            bhb.setProjectFileLocation(file);
-            parser.parse(file, bhb);
-            Project project = bhb.getProject();
-            project.setFrontEnd(frontEnd);
-            return project;
-        } catch (ParserConfigurationException pce) {
-            throw new AntException(pce);
-        } catch (SAXException se) {
-            Exception e = se.getException();
-            if (e != null && e instanceof AntException) {
-                // it's one of our own thrown from inside the parser to stop it
-                throw (AntException)e;
-            }
-            throw new AntException(se);
-        } catch (IOException ioe) {
-            throw new AntException(ioe);
-        }
-    }
-    
-    /**
-     * Returns the TaskManager associated with this ProjectBuilder and
-     * the projects that it builds
-     */
-    public TaskManager getTaskManager() {
-        return taskManager;
-    }
-    
-    // -----------------------------------------------------------------
-    // INNER CLASSES
-    // -----------------------------------------------------------------    
-    
-    /**
-     * Inner class that implements the needed SAX methods to get all the
-     * data needed out of a build file.
-     */
-    class BuilderHandlerBase extends HandlerBase {
-    
-        private static final int STATE_START = 0;
-        private static final int STATE_PROJECT = 1;
-        private static final int STATE_TARGET = 2;
-        private static final int STATE_TASK = 3;
-        private static final int STATE_DESCRIPTION = 4;
-        private static final int STATE_PROPERTY = 5;
-        private static final int STATE_FINISHED = 99;
-    
-        private int state = STATE_START;
-        
-        private Vector tagCharDataStack = new Vector();
-        
-        private Target currentTarget;
-        private Task currentTask;
-    
-        Project project = new Project(frontEnd, taskManager);
-    
-        Project getProject() {
-            return project;
-        }
-        
-        void setProjectFileLocation(File file) {
-            project.setBaseDir(file.getParentFile());
-        }
-        
-        public void startElement(String name, AttributeList atts) throws SAXException {
-
-            StringBuffer tagCharData = new StringBuffer();
-            tagCharDataStack.insertElementAt(tagCharData, 0);
-            
-            switch (state) {
-            
-              case STATE_START:
-                if (name.equals("project")) {
-                    state = STATE_PROJECT;
-                    String projectName = atts.getValue("name");
-                    if (projectName != null) {
-                        project.setName(projectName);
-                    } else {
-                        String msg = "Project element doesn't contain a name attribute";
-                        AntException ae = new AntException(msg);
-                        throw new SAXException(ae);
-                    }
-                    String defaultTarget = atts.getValue("default");
-                    if (defaultTarget != null) {
-                        project.setDefaultTargetName(defaultTarget);
-                    }
-                    String baseDirName = atts.getValue("basedir");
-                    if (baseDirName != null) {
-                        // XXX need to check to see if base dir exists
-                        project.setBaseDir(new File(baseDirName));
-                    }
-                } else {
-                    String msg = "Project file doesn't contain a project element as " +
-                                 "its root node";
-                    AntException ae = new AntException(msg);
-                    throw new SAXException(ae);
-                }
-                break;
-                
-              case STATE_PROJECT:
-              
-                // valid tags in a project object are: description, property, and target
-              
-                if (name.equals("description")) {
-                    state = STATE_DESCRIPTION;
-                } else if (name.equals("property")) {
-                    state = STATE_PROPERTY;
-                    String propertyName = atts.getValue("name");
-                    String propertyValue = atts.getValue("value");
-                    if (propertyName == null) {
-                        String msg = "Name attribute must be present on property";
-                        AntException ae = new AntException(msg);
-                        throw new SAXException(ae);
-                    } else if (propertyValue == null) {
-                        String msg = "Value attribute must be present on property";
-                        AntException ae = new AntException(msg);
-                        throw new SAXException(ae);
-                    } else {
-                        project.setProperty(propertyName, propertyValue);
-                    }
-                } else if (name.equals("target")) {
-                    state = STATE_TARGET;
-                    String targetName = atts.getValue("name");
-                    if (targetName != null) {
-                        currentTarget = new Target(targetName);
-                        project.addTarget(currentTarget);
-                    } else {
-                        // XXX figure out which target we're talking about! 
-                        // Like a location
-                        String msg = "Target element doesn't contain a name attribute";
-                        AntException ae = new AntException(msg);
-                        throw new SAXException(ae);
-                    }
-                    String depends = atts.getValue("depends");
-                    if (depends != null) {
-                        StringTokenizer tok = new StringTokenizer(depends, ",", false);
-                        while(tok.hasMoreTokens()) {
-                            currentTarget.addDependancy(tok.nextToken().trim());
-                        }
-                    }
-                                            
-                    // XXX add dependency checks
-                } else {
-                    System.out.println("Expecting target, got: " + name);
-                    // XXX exception out
-                }
-                break;
-                
-              case STATE_TARGET:
-              
-                // Valid tags inside target: task
-              
-                state = STATE_TASK;
-                //System.out.println("Getting task: " + name + " for target " + 
-                //                   currentTarget);
-                // XXX need to validate that task type (name) exists in system
-                // else exception out.
-                currentTask = new Task(name);
-                currentTarget.addTask(currentTask);
-                for (int i = 0; i < atts.getLength(); i++) {
-                    String atName = atts.getName(i);
-                    String atValue = atts.getValue(i);
-                    currentTask.addAttribute(atName, atValue);
-                }
-                break;
-                
-              case STATE_TASK:
-              
-                // data in here needs to be reflected into tasks
-                
-                System.out.println("Not yet supporting tags inside of tasks!");
-                System.out.println("The project build will probably bust right here");
-                
-                break;
-                
-              default:
-                System.out.println("I'm not sure, but we're off base here: " + name);
-                // XXX exception out
-            }
-        }
-        
-        public void characters(char ch[], int start, int length) throws SAXException {
-            StringBuffer buf = (StringBuffer)tagCharDataStack.elementAt(0);
-            buf.append(ch, start, length);
-        }
-        
-        public void endElement(String name) throws SAXException {
-            
-            StringBuffer elementData = (StringBuffer)tagCharDataStack.elementAt(0);
-            tagCharDataStack.removeElementAt(0);
-            
-            switch (state) {
-            
-              case STATE_TASK:
-                state = STATE_TARGET;
-                break;
-            
-              case STATE_TARGET:
-                if (name.equals("target")) {
-                    state = STATE_PROJECT;
-                } else {
-                    System.out.println("Expecting to get an end of target, got: " + name);
-                    // XXX exception out.
-                }
-                break;
-            
-              case STATE_DESCRIPTION:
-                if (name.equals("description")) {
-                    state = STATE_PROJECT;
-                    project.setDescription(elementData.toString().trim());
-                } else {
-                    System.out.println("Expecting to get an end of description, got: " +
-                        name);
-                    // XXX exception out.
-                }
-                break;
-            
-              case STATE_PROPERTY:
-                if (name.equals("property")) {
-                    state = STATE_PROJECT;
-                } else {
-                    System.out.println("Expecting to get end of property, got: " + name);
-                    // XXX exception out
-                }
-                break;
-            
-              case STATE_PROJECT:
-                if (name.equals("project")) {
-                    state = STATE_FINISHED;
-                } else {
-                    System.out.println("Expecting to get end of project, got: " + name);
-                    // XXX exception out;
-                }
-                break;
-            
-              default:
-                System.out.println("I'm not sure what we are ending here: " + name);
-                // XXX exception out;
-            }
-        }
-    }
-}
diff --git a/proposal/anteater/source/main/org/apache/ant/Target.java b/proposal/anteater/source/main/org/apache/ant/Target.java
deleted file mode 100644
index 4d5c98a..0000000
--- a/proposal/anteater/source/main/org/apache/ant/Target.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// ---------------------------------------------------------------------
-// (c)2000 Apache Software Foundation
-//
-// ---------------------------------------------------------------------
-
-package org.apache.ant;
-
-import java.util.*;
-
-/**
- * In memory container for an Ant target.
- */
-public class Target {
-
-    // -----------------------------------------------------------------
-    // PRIVATE DATA MEMBERS
-    // -----------------------------------------------------------------
-
-    /**
-     * String containing the name of the target. This name must be
-     * unique withing a project.
-     */
-    private String name;
-
-    /**
-     * Vector containing the names of the targets that this target
-     * depends on.
-     */
-    private Vector dependsList = new Vector();
-
-    /**
-     * Vector containing the tasks that are part of this target.
-     */
-    private Vector tasks = new Vector();
-
-    // -----------------------------------------------------------------
-    // CONSTRUCTORS
-    // -----------------------------------------------------------------
-
-    /**
-     * Constructs a new Target object with the given name.
-     */
-    public Target(String name) {
-        this.name = name;
-    }
-
-    // -----------------------------------------------------------------
-    // PUBLIC ACCESSOR METHODS
-    // -----------------------------------------------------------------
-    
-    /**
-     * Adds a dependancy to this task.
-     */
-    public void addDependancy(String targetName) {
-        dependsList.addElement(targetName);
-    }
-       
-    /**
-     *
-     */
-    public void addTask(Task task) {
-        tasks.addElement(task);
-    }
-    
-    /**
-     * Returns a String containing the name of this Target.
-     */
-    public String getName() {
-        return name;
-    }
-    
-    /**
-     *
-     */
-    public String toString() {
-        return "TARGET: " + name;
-    }
-
-    /**
-     * Returns a Vector of Tasks contained in this Target. 
-     * <p>
-     * Please use caution when using this method. I am not happy
-     * about exposing this data as something other than a 
-     * Collection, but don't want to use 1.1 collections. So, 
-     * this method may change in the future. You have been warned.
-     */
-    public Vector getTasks() {
-        return tasks;
-    }
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/main/org/apache/ant/Task.java b/proposal/anteater/source/main/org/apache/ant/Task.java
deleted file mode 100644
index 363c801..0000000
--- a/proposal/anteater/source/main/org/apache/ant/Task.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// ---------------------------------------------------------------------
-// (c)2000 Apache Software Foundation
-//
-// ---------------------------------------------------------------------
-
-package org.apache.ant;
-
-import java.util.*;
-
-/**
- * In memory container for an Ant target.
- *
- * XXX need a way to query which attributes are valid for this particular
- * task type... Like into Ant object to do this?
- */
-public class Task {
-
-    // -----------------------------------------------------------------
-    // PRIVATE DATA MEMBERS
-    // -----------------------------------------------------------------
-    
-    /**
-     *
-     */
-    private Hashtable attributes = new Hashtable();
-    
-    /**
-     * String containing the type of the task.
-     */
-    private String type;
-
-    // -----------------------------------------------------------------
-    // CONSTRUCTORS
-    // -----------------------------------------------------------------
-
-    /**
-     * Constructs a new Target object with the given name.
-     */
-    public Task(String type) {
-        this.type = type;
-    }
-
-    // -----------------------------------------------------------------
-    // PUBLIC ACCESSOR METHODS
-    // -----------------------------------------------------------------
-    
-    /**
-     *
-     */
-    public void addAttribute(String name, String value) {
-        attributes.put(name, value);
-    }
-    
-    public String getAttribute(String name) {
-        return (String)attributes.get(name);
-    }
-    
-    /**
-     *
-     */
-    public Hashtable getAttributes() {
-        return attributes;
-    }
-    
-    /**
-     *
-     */
-    public Enumeration getAttributeNames() {
-        return attributes.keys();
-    }
-     
-    /**
-     * Returns a String containing the name of this Target.
-     */
-    public String getType() {
-        return type;
-    }
-    
-    /**
-     *
-     */
-    public String toString() {
-        return "TASK: " + type;
-    }
-
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/main/org/apache/ant/TaskManager.java b/proposal/anteater/source/main/org/apache/ant/TaskManager.java
deleted file mode 100644
index 9ffc7e9..0000000
--- a/proposal/anteater/source/main/org/apache/ant/TaskManager.java
+++ /dev/null
@@ -1,268 +0,0 @@
-// -------------------------------------------------------------------------------
-// Copyright (c)2000 Apache Software Foundation
-// -------------------------------------------------------------------------------
-
-package org.apache.ant;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import java.util.zip.*;
-
-/**
- * Manager of tasks and all things related to tasks. Tasks can be found in a
- * wide number of locations -- and most of these locations require class loading
- * help. As well, new nodes on the task search path may be added at any time.
- * When these are added, new tasks should be scanned for.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class TaskManager {
-
-    // -----------------------------------------------------------------
-    // PRIVATE DATA MEMBERS
-    // -----------------------------------------------------------------
-    
-    /**
-     * FrontEnd that this TaskManager can communicate through.
-     */
-    private AntFrontEnd frontEnd;
-    
-    /**
-     * Data structure where all the Class definition for all known tasks are
-     * held.
-     */
-    private Hashtable taskClasses = new Hashtable();
-    
-    /**
-     * Data structure that holds all the nodes where tasks are picked up from.
-     */
-    private Vector taskPathNodes = new Vector();
-
-    // -----------------------------------------------------------------
-    // CONSTRUCTORS
-    // -----------------------------------------------------------------
-    
-    /**
-     * Creates a new TaskManager.
-     */
-    TaskManager(AntFrontEnd frontEnd) {
-        this.frontEnd = frontEnd;
-    }
-    
-    // -----------------------------------------------------------------
-    // PUBLIC METHODS
-    // -----------------------------------------------------------------
- 
-    /**
-     * Adds a node to the task path 
-     */
-    public void addTaskPathNode(File file) throws AntException {
-        taskPathNodes.addElement(file);
-        processTaskPathNode(file);
-    }
-
-    // -----------------------------------------------------------------
-    // PACKAGE METHODS
-    // -----------------------------------------------------------------
-    
-    /**
-     *
-     */
-    AbstractTask getTaskInstance(String taskName) throws AntException {
-        Class clazz = (Class)taskClasses.get(taskName);
-        try {
-            return (AbstractTask)clazz.newInstance();
-        } catch (Exception e) { 
-            String msg = "Can't instantiate task: " + taskName;
-            AntException ae = new AntException(msg, e);
-            throw ae;
-        }
-    }
- 
-    // -----------------------------------------------------------------
-    // PRIVATE METHODS
-    // -----------------------------------------------------------------
-   
-    /**
-     * Returns an enum of the task names that are defined in a given 
-     * properties file.
-     */
-    private Enumeration getTaskNames(Properties props) {
-        Vector v = new Vector();
-        String s = props.getProperty("tasks");
-        StringTokenizer tok = new StringTokenizer(s, ",", false);
-        while (tok.hasMoreTokens()) {
-            String taskName = tok.nextToken().trim();
-            v.addElement(taskName);
-        }
-        return v.elements();
-    }
-   
-    /**
-     * Processes a directory to get class defintions from it
-     */
-    private void processDir(File dir) {
-        frontEnd.writeMessage("Scanning " + dir + " for tasks", 
-                                       AntFrontEnd.MSG_LEVEL_LOW);
-        File file = new File(dir, "taskdef.properties");
-        if (file.exists()) {
-            try {
-                InputStream in = new FileInputStream(file);
-                Properties props = new Properties();
-                props.load(in);
-                in.close();
-                
-                Enumeration enum = getTaskNames(props);
-                while (enum.hasMoreElements()) {
-                    String taskName = (String)enum.nextElement();
-                    String taskClass = props.getProperty("task." + taskName + ".class");
-                    URLClassLoader loader = new URLClassLoader(new URL[] {dir.toURL()});
-                    try {
-                        Class clazz = loader.loadClass(taskClass);
-                        frontEnd.writeMessage("Got Task: " + taskName +
-                                                       clazz, AntFrontEnd.MSG_LEVEL_LOW);
-                        taskClasses.put(taskName, clazz);
-                    } catch (ClassNotFoundException cnfe) {
-                        System.out.println("Couldn't load task: " + taskName);
-                        System.out.println(cnfe);
-                        // XXX error out and stop....
-                    }
-                }
-            } catch (IOException ioe) {
-                System.out.println("Could not work with dir: " + dir);
-                System.out.println(ioe);
-                // XXX error out and stop the build
-            }
-        }
-    }
-   
-    /**
-     * Processes a jar file to get class definitions from it
-     */
-    private void processJar(File file) throws AntException {
-        frontEnd.writeMessage("Scanning " + file + " for tasks", 
-                                       AntFrontEnd.MSG_LEVEL_LOW);
-        try {
-            ZipFile zipFile = new ZipFile(file);
-            ZipEntry zipEntry = zipFile.getEntry("taskdef.properties");
-            if (zipEntry != null) {
-                InputStream in = zipFile.getInputStream(zipEntry);
-                Properties props = new Properties();
-                props.load(in);
-                in.close();
-            
-                Enumeration enum = getTaskNames(props);
-                while (enum.hasMoreElements()) {
-
-                    String taskName = (String)enum.nextElement();
-                    String taskClass = props.getProperty("task." + taskName + ".class");
-                    if (taskClass == null) {
-                        String msg = "No class definition for task " + taskName +
-                                     "in jar file " + file;
-                        throw new AntException(msg);
-                    }
-                    URLClassLoader loader = new URLClassLoader(new URL[] {file.toURL()});
-                    try {
-                        Class clazz = loader.loadClass(taskClass);
-                       	frontEnd.writeMessage("Got Task: " + taskName +
-                                                       clazz, AntFrontEnd.MSG_LEVEL_LOW);
-                        taskClasses.put(taskName, clazz);
-                    } catch (ClassNotFoundException cnfe) {
-                        System.out.println("Couldn't load task: " + taskName);
-                        System.out.println(cnfe);
-                        // XXX error out and stop....
-                    }
-                }
-            }
-            // make sure to not leave resources hanging
-            zipFile.close();
-        } catch (IOException ioe) {
-            System.out.println("Couldn't work with file: " + file);
-            System.out.println(ioe);
-            // XXX need to exception out of here properly to stop things 
-        }
-    }
-   
-    /**
-     * Processes a node of the task path searching for task definitions there
-     * and adding them to the list of known tasks
-     */
-    private void processTaskPathNode(File file) throws AntException {
-    
-        // task path nodes can be any of the following:
-        //     * jar file
-        //     * directory of jar files
-        //     * directory holding class files
-        
-        if(file.isDirectory()) {
-            // first look for all jar files here
-            // second look for a taskdefs.properties here to see if we should
-            // treat the directory as a classpath
-            
-            String[] files = file.list();
-            for (int i = 0; i < files.length; i++) {
-                if (files[i].endsWith(".jar")) {
-                    processJar(new File(file, files[i]));
-                } else if (files[i].equals("taskdef.properties")) {
-                    processDir(file);
-                }
-            }
-        } else if (file.getName().endsWith(".jar")) {
-            processJar(file);
-        }
-    }
-    
-    /**
-     * Sets up the taskpath based on the currently running operating
-     * system. In general, the ordering of the taskpath is: user directory,
-     * system directory, and then installation. This allows users or
-     * system admins to override or add tasks.
-     */
-    private void setUpTaskPath() throws AntException {
-        
-        // 1st, add user's home dir.
-        
-        File f;
-        
-        String userHome = System.getProperty("user.home");
-        
-        // generic unix
-        f = new File(userHome + ".ant", "tasks");
-        if (f.exists() && f.isDirectory()) {
-            addTaskPathNode(f);
-        }
-        
-        // macos x
-        f = new File(userHome + "/Library/Ant", "Tasks");
-        if (f.exists() && f.isDirectory()) {
-            addTaskPathNode(f);
-        }
-        
-        // windows -- todo
-        
-        // 2nd, add system local dir.
-        
-        // generic unix
-        f = new File("/usr/local/ant/tasks");
-        if (f.exists() && f.isDirectory()) {
-            addTaskPathNode(f);
-        }
-        
-        // macos x
-        f = new File("/Library/Ant/Tasks");
-        if (f.exists() && f.isDirectory()) {
-            addTaskPathNode(f);
-        }
-        
-        // windows -- todo
-        
-        // 3rd, add installation local dir.
-        
-        //System.out.println("BASE: " + this.getClass().getResource("/"));
-        
-        // XXX ---- not really sure how the best way of getting this info is...
-        // hafta think about it.
-    }
-
-}
diff --git a/proposal/anteater/source/main/org/apache/ant/cli/CLIFrontEnd.java b/proposal/anteater/source/main/org/apache/ant/cli/CLIFrontEnd.java
deleted file mode 100644
index 91cb8f3..0000000
--- a/proposal/anteater/source/main/org/apache/ant/cli/CLIFrontEnd.java
+++ /dev/null
@@ -1,307 +0,0 @@
-// -------------------------------------------------------------------------------
-// Copyright (c)2000 Apache Software Foundation
-// -------------------------------------------------------------------------------
-
-package org.apache.ant.cli;
-
-import java.io.*;
-import java.util.*;
-import org.apache.ant.*;
-
-/**
- * Front end for the Command Line Interface that gets passed to Ant so that
- * it can communicate information to the CLI.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class CLIFrontEnd extends AntFrontEnd {
-
-    // -----------------------------------------------------------------
-    // PRIVATE MEMBERS
-    // -----------------------------------------------------------------
-
-    /**
-     *
-     */
-    private String[] args;
-
-    /**
-     * ProjectBuilder that is associated with this frontEnd. 
-     */
-    private ProjectBuilder projectBuilder;
-
-    /**
-     *
-     */
-    private int msgLevelFilter = MSG_LEVEL_MED;
-    
-    /**
-     * TaskManager instance that we can set taskpaths and such on.
-     */
-    private TaskManager taskManager;
-    
-    // -----------------------------------------------------------------
-    // CONSTRUCTORS
-    // ----------------------------------------------------------------- 
-
-    /**
-     * Creates a new CLIFrontEnd that can drive an Ant build from the Command
-     * Line.
-     */
-    public CLIFrontEnd() {
-        projectBuilder = new ProjectBuilder(this);
-        taskManager = projectBuilder.getTaskManager();
-    }
-
-    // -----------------------------------------------------------------
-    // PUBLIC METHODS
-    // -----------------------------------------------------------------    
-
-    /**
-     * Send notification to the FrontEnd that execution has moved into
-     * the scope of a particular project. The default implementation
-     * does nothing. 
-     */
-    public void notifyProjectStart(Project project) {
-        writeMessage("Project Start: " + project.getName(), MSG_LEVEL_LOW);
-    }
-
-    /**
-     * Send notification to the FrontEnd that execution has moved out
-     * of the scope of a particular Project. The default implementation
-     * does nothing.
-     */
-    public void notifyProjectEnd(Project project) {
-        writeMessage("Project End: " + project.getName(), MSG_LEVEL_LOW);
-    }
-    
-    /**
-     * Send notification to the FrontEnd that execution has moved into
-     * the scope of a particular target. The default implementation does
-     * nothing.
-     */
-    public void notifyTargetStart(Target target) {
-        writeMessage("Target Start: " + target.getName(), MSG_LEVEL_LOW);
-    }
-    
-    /**
-     * Send notification to the FrontEnd that execution has moved out of
-     * the scope of a particular target. The default implementation does
-     * nothing.
-     */
-    public void notifyTargetEnd(Target target) {
-        writeMessage("Target End: " + target.getName(), MSG_LEVEL_LOW); 
-    }
-    
-    /**
-     * Send notification to the FrontEnd that execution has moved into the
-     * scope of a particular task. The default implementation does nothing.
-     */
-    public void notifyTaskStart(Task task) {
-        writeMessage("Task Start: " + task.getType(), MSG_LEVEL_LOW);
-    }
-    
-    /**
-     * Send notification to the FrontEnd that execution has moved out of
-     * the scope of a particular task. The default implementation does
-     * nothing.
-     */
-    public void notifyTaskEnd(Task task) {
-        writeMessage("Task End: " + task.getType(), MSG_LEVEL_LOW);
-    }
-
-    /**
-     *
-     */
-    public void run(String[] args) {
-        this.args = args;
-        String target = "";
-        File buildFile = null;
-        writeMessage("Ant(Eater) -- Proposed Ant 2.0");
-        
-        // process through the args set
-        
-        if (isArg("help")) {
-            printHelp();
-            return;
-        }
-        
-        if (isArg("quiet")) {
-            msgLevelFilter = MSG_LEVEL_HIGH;
-        }
-        
-        if (isArg("verbose")) {
-            msgLevelFilter = MSG_LEVEL_LOW;
-        }
-        
-        String argTaskpath = getArgValue("taskpath");
-        if (argTaskpath != null) {
-            if (argTaskpath.equals("")) {
-                writeMessage("Must give a value for -taskpath");
-                return;
-            } else {
-                // XXX need to separate on path seps so that real paths can be taken
-                try {
-                    taskManager.addTaskPathNode(new File(argTaskpath));
-                } catch (AntException ae) {
-                    System.out.println(ae);
-                    System.out.println(ae.getMessage());
-                    ae.printStackTrace(System.out);
-                    return;
-                }
-            }
-        }
-        
-        String argBuildfile = getArgValue("buildfile");
-        if (argBuildfile != null) {
-            if (argBuildfile.equals("")) {
-                writeMessage("Must give a value for -buildfile");
-                return;
-            } else {
-                //try {
-                buildFile = new File(argBuildfile);
-                    //ant.setBuildfile(new File(argBuildfile));
-                //} catch (AntException ae) {
-                //    writeMessage("Can't set buildfile");
-                //    writeMessage(ae.toString());
-                //    return;
-                //}
-            }
-        }
-        
-        target = getTargetArg();
-                
-        // XXX do something if we dont' have a buildfile set!
-        
-        // XXX really should check to make sure that the target is set to something
-        // like get the default...
-        
-        try {
-            Project project = projectBuilder.buildFromFile(buildFile);
-            
-            project.setFrontEnd(this);
-            project.startBuild(target);
-        } catch (AntException ae) {  
-        
-            //XXX this whole write a string at a time message handling
-            // sucks and needs to be improved...
-                    
-            writeMessage("Build Stopped");
-            writeMessage("    Project: " + ae.getProject().getName());
-            writeMessage("     Target: " + ae.getTarget().getName());
-            writeMessage("  Task Type: " + ae.getTask().getType());
-            writeMessage("Details Follow");
-            writeMessage("");
-            writeMessage(ae.getMessage());
-            ae.printStackTrace(System.out);
-            Throwable t = ae.getCause();
-            if (t != null) {
-                writeMessage("");
-                writeMessage("Cause Exception: " + t.toString());
-                writeMessage(t.getMessage());
-                t.printStackTrace(System.out);
-            }
-        }        
-    }
-
-    /**
-     * Writes a message to the front end.
-     */
-    public void writeMessage(String message, int level) {
-        if (level >= msgLevelFilter) {
-            System.out.println(message);
-        }
-    }
-    
-    // -----------------------------------------------------------------
-    // PRIVATE METHODS
-    // ----------------------------------------------------------------- 
-    
-    /**
-     * Returns the value for a given argument name, null if the argument
-     * name isn't in the argument set, or "" if the argument doesn't have
-     * a value.
-     */
-    private String getArgValue(String argName) {
-        for (int i = 0; i < args.length; i++) {
-            if (args[i].equals("-" + argName)) {
-                if (i != args.length - 1) {
-                    return args[i + 1];
-                } else {
-                    return "";
-                }
-            }
-        }
-        return null;
-    }
-    
-    /**
-     * Returns the target that was requested to be built, if any. If no
-     * target is determined, returns null.
-     */
-    public String getTargetArg() {
-        String possibleTarget = getArgValue("target");
-        if (possibleTarget != null) {
-            if (possibleTarget.equals("")) {
-                writeMessage("Must give a value for -target");
-            } else {
-                return possibleTarget;
-            }
-        } 
-        
-        possibleTarget = args[args.length - 1];
-        if (possibleTarget.startsWith("-")) {
-            return null;
-        }
-        if (args[args.length - 2].startsWith("-")) {
-            // our possible target might be an arg value instead of a target
-            // XXX ugh -- there has to be a better way here. We need to hold
-            // a list of all args that don't have values somewhere.
-            if (args[args.length - 2].equals("-help") ||
-                args[args.length - 2].equals("-verbose") ||
-                args[args.length - 2].equals("-quiet")) {
-                // we're ok, the arg before the possible target doesn't have a value
-                return possibleTarget;
-            } else {
-                return null;
-            }
-        } else {
-            return possibleTarget;
-        }
-    }
-    
-    /**
-     * Indicates whether or not a given argument name exists in the argument
-     * set.
-     */
-    private boolean isArg(String argName) {
-        for (int i = 0; i < args.length; i++) {
-            if (args[i].equals("-" + argName)) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
-    /**
-     * Prints help to System.out
-     */  
-    private void printHelp() {
-    
-        // XXX resource bundle this.
-    
-        String ls = System.getProperty("line.separator");
-        String msg = "Usage: ant [args] [target]" + ls +
-                     "    Arguments can be any of the following:" + ls +
-                     "        -help" + ls +
-                     "        -taskpath [path]" + ls +
-                     "        -buildfile [file]" +ls +
-                     "        -verbose" + ls +
-                     "        -quiet"   + ls + ls +
-                     "    Note that if no buildfile argument is given, Ant will"+ls+
-                     "    try to find one in the current directory. If there are"+ls+
-                     "    two or more buildfiles in the current directory, it" +ls+
-                     "    will bail.";
-        writeMessage(msg);
-    }
-}
diff --git a/proposal/anteater/source/main/org/apache/ant/cli/Main.java b/proposal/anteater/source/main/org/apache/ant/cli/Main.java
deleted file mode 100644
index 7a81b89..0000000
--- a/proposal/anteater/source/main/org/apache/ant/cli/Main.java
+++ /dev/null
Binary files differ
diff --git a/proposal/antfarm/ant.ant b/proposal/antfarm/ant.ant
deleted file mode 100644
index 4c1a242..0000000
--- a/proposal/antfarm/ant.ant
+++ /dev/null
@@ -1,35 +0,0 @@
-<!-- this is a test -->
-<project name="ant" 
-	xmlns:doc="http:/apache.org/ant-2.0.0/doc" 
-	doc:copyright="Copyright (c) 2000 The Apache Software Foundation">
-
-	<import name="java2sdk"/>
-	<import name="jaxp"/>
-
-	<target name="init" depends="java2sdk:init"/>
-
-	<target name="core" abc:aaaa="foo">
-		<javac dest="temp/core" classpath="">
-			<fileset src="core"/>
-		</javac>
-		<jar jarfile="dist/ant.jar" basedir="temp/core" manifest="core/META-INF/manifest.mf"/>
-	</target>
-
-	<target name="xml" depends="core jaxp:init">
-		<javac dest="temp/xml" classpath="dist/ant.jar:{jaxp:ant.base.dir}/jaxp.jar:{jaxp:ant.base.dir}/crimson.jar">
-			<fileset src="xml"/>
-		</javac>
-		<jar jarfile="dist/xml/ant-xml.jar" basedir="temp/xml"/>
-		<copy src="boot/xml/jaxp.jar" dest="dist/xml/jaxp.jar"/>
-		<copy src="boot/xml/crimson.jar" dest="dist/xml/crimson.jar"/>
-	</target>
-
-	<target name="tasks" depends="core">
-		<javac dest="temp/tasks" classpath="dist/ant.jar">
-			<fileset src="tasks"/>
-		</javac>
-		<jar jarfile="dist/tasks/standard.jar" basedir="temp/tasks"/>
-	</target>
-
-	<target name="all" depends="init core xml tasks"/>
-</project>
\ No newline at end of file
diff --git a/proposal/antfarm/bootstrap.bat b/proposal/antfarm/bootstrap.bat
deleted file mode 100755
index e46e815..0000000
--- a/proposal/antfarm/bootstrap.bat
+++ /dev/null
@@ -1,35 +0,0 @@
-@if not exist boot mkdir boot
-@if not exist boot\tasks mkdir boot\tasks
-@if not exist boot\xml mkdir boot\xml
-@if not exist temp mkdir temp
-@if not exist temp\core mkdir temp\core
-@if not exist temp\xml mkdir temp\xml
-@if not exist temp\tasks mkdir temp\tasks
-
-javac -classpath "" -d temp\core core\org\apache\tools\ant\*.java core\org\apache\tools\ant\cmdline\*.java core\*.java 
-@if errorlevel 1 goto end
-
-jar -cfm boot\ant.jar core\META-INF\manifest.mf -C temp\core .
-@if errorlevel 1 goto end
-
-javac -classpath "boot\ant.jar;jaxp\jaxp.jar;jaxp\crimson.jar" -d temp\xml xml\org\apache\tools\ant\xml\*.java
-@if errorlevel 1 goto end
-
-jar -cf boot\xml\ant-xml.jar -C temp\xml .
-@if errorlevel 1 goto end
-
-javac -classpath "boot\ant.jar" -d temp\tasks tasks\org\apache\tools\ant\tasks\*.java
-@if errorlevel 1 goto end
-
-copy tasks\java2sdk.ant temp\tasks\java2sdk.ant
-
-jar -cf boot\tasks\java2sdk.jar -C temp\tasks .
-@if errorlevel 1 goto end
-
-copy jaxp\jaxp.jar boot\xml\jaxp.jar
-copy jaxp\crimson.jar boot\xml\crimson.jar
-
-@rmdir /s /q temp
-
-
-:end
\ No newline at end of file
diff --git a/proposal/antfarm/bootstrap.sh b/proposal/antfarm/bootstrap.sh
deleted file mode 100644
index ede3704..0000000
--- a/proposal/antfarm/bootstrap.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-if ! test -d boot ; then
-    mkdir -p boot/tasks
-    mkdir -p boot/xml
-fi
-
-if ! test -d  temp ; then
-    mkdir -p temp/core
-    mkdir -p temp/xml
-    mkdir -p temp/tasks
-fi
-
-if  test -z "$JAVAC" ; then
-    JAVAC=javac;
-fi
-
-TOOLS=core/org/apache/tools
-
-${JAVAC} -d temp/core ${TOOLS}/ant/*.java \
-                      ${TOOLS}/ant/cmdline/*.java \
-                      core/*.java
-
-jar -cfm boot/ant.jar core/META-INF/manifest.mf -C temp/core .
-
-${JAVAC} -classpath boot/ant.jar:jaxp/jaxp.jar:jaxp/crimson.jar -d temp/xml xml/org/apache/tools/ant/xml/*.java
-
-jar -cf boot/xml/ant-xml.jar -C temp/xml .
-
-${JAVAC} -classpath boot/ant.jar -d temp/tasks tasks/org/apache/tools/ant/tasks/*.java
-
-cp tasks/java2sdk.ant temp/tasks/java2sdk.ant
-
-jar -cf boot/tasks/java2sdk.jar -C temp/tasks .
-
-cp jaxp/jaxp.jar boot/xml/jaxp.jar
-cp jaxp/crimson.jar boot/xml/crimson.jar
-
-#rm -rf temp
diff --git a/proposal/antfarm/build.bat b/proposal/antfarm/build.bat
deleted file mode 100755
index 6f58b83..0000000
--- a/proposal/antfarm/build.bat
+++ /dev/null
@@ -1 +0,0 @@
-java -classpath boot\ant.jar -Dant.project.path=.;jaxp ant ant:all
\ No newline at end of file
diff --git a/proposal/antfarm/build.sh b/proposal/antfarm/build.sh
deleted file mode 100644
index 5ff9eb6..0000000
--- a/proposal/antfarm/build.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-java -classpath boot/ant.jar -Dant.project.path=.:jaxp ant ant:all
diff --git a/proposal/antfarm/clean.bat b/proposal/antfarm/clean.bat
deleted file mode 100755
index 8d85ad7..0000000
--- a/proposal/antfarm/clean.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-if exist boot rmdir /s /q boot
-if exist temp rmdir /s /q temp
-if exist dist rmdir /s /q dist
diff --git a/proposal/antfarm/clean.sh b/proposal/antfarm/clean.sh
deleted file mode 100644
index df0b792..0000000
--- a/proposal/antfarm/clean.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-if test -d boot ; then
-    rm -rf boot
-fi
-
-if test -d temp ; then
-    rm -rf temp
-fi
-
-if test -d dist ; then
-    rm -rf dist
-fi
diff --git a/proposal/antfarm/core/META-INF/manifest.mf b/proposal/antfarm/core/META-INF/manifest.mf
deleted file mode 100644
index 5de3b41..0000000
--- a/proposal/antfarm/core/META-INF/manifest.mf
+++ /dev/null
@@ -1,2 +0,0 @@
-Main-Class: org.apache.tools.ant.cmdline.Main
-
diff --git a/proposal/antfarm/core/ant.java b/proposal/antfarm/core/ant.java
deleted file mode 100644
index 555667b..0000000
--- a/proposal/antfarm/core/ant.java
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-import org.apache.tools.ant.cmdline.Main;
-
-public class ant {
-    public static void main(String[] args) throws Exception {
-        Main.main(args);
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/AntException.java b/proposal/antfarm/core/org/apache/tools/ant/AntException.java
deleted file mode 100644
index 2dcbb00..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/AntException.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-import java.io.*;
-
-/**
- *  This class represents an error within Ant. The end
- *  user should not be able to trigger this exception under
- *  normal circumstances. The BuildException class should
- *  be used instead to indicate that a compile or some other task
- *  has failed.
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class AntException extends RuntimeException {
-    private Throwable cause;
-
-    public AntException(String msg) {
-        super(msg);
-    }
-
-    public AntException(String msg, Throwable cause) {
-        super(msg);
-
-        this.cause = cause;
-    }
-
-    public Throwable getCause() {
-        return cause;
-    }
-
-    public void printStackTrace() {
-        printStackTrace(System.err);
-    }
-
-    public void printStackTrace(PrintStream out) {
-        super.printStackTrace(out);
-
-        if (cause != null) {
-            cause.printStackTrace(out);
-        }
-    }
-
-    public void printStackTrace(PrintWriter out) {
-        super.printStackTrace(out);
-
-        if (cause != null) {
-            cause.printStackTrace(out);
-        }
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/AntSecurityManager.java b/proposal/antfarm/core/org/apache/tools/ant/AntSecurityManager.java
deleted file mode 100644
index c337235..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/AntSecurityManager.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-/**
- *  This security manager is installed by the Workspace class
- *  while tasks are being invoked so that System.exit calls can
- *  be intercepted. Any tasks that tries to call System.exit
- *  will cause an ExitException to be thrown instead of terminating
- *  the VM.
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class AntSecurityManager extends SecurityManager {
-    /**
-     *  Throws an ExitException which should be caught at the task level and handled.
-     */
-    public void checkExit(int status) {
-        throw new ExitException(status);
-    }
-
-    /**
-     *  Allows anything.
-     */
-    public void checkPermission(java.security.Permission p) {
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/BuildEvent.java b/proposal/antfarm/core/org/apache/tools/ant/BuildEvent.java
deleted file mode 100644
index 5781857..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/BuildEvent.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-import java.util.EventObject;
-
-/**
- *  This class encapsulates information about events that occur during
- *  a build.
- *
- *  @see BuildListener
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class BuildEvent extends EventObject {
-    public static final int DEBUG = 1;
-    public static final int INFO = 2;
-    public static final int WARN = 3;
-    public static final int ERROR = 4;
-
-    private Workspace workspace;
-    private Project project;
-    private Target target;
-    private Task task;
-    private String message;
-    private int priority;
-    private BuildException exception;
-
-    /**
-     * Construct a BuildEvent for a workspace level event
-     *
-     * @param workspace the workspace that emitted the event.
-     */
-    public BuildEvent(Workspace workspace) {
-        super(workspace);
-        this.workspace = workspace;
-        this.project = null;
-        this.target = null;
-        this.task = null;
-    }
-
-    /**
-     * Construct a BuildEvent for a project level event
-     *
-     * @param project the project that emitted the event.
-     */
-    public BuildEvent(Project project) {
-        super(project);
-        this.workspace = project.getWorkspace();
-        this.project = project;
-        this.target = null;
-        this.task = null;
-    }
-
-    /**
-     * Construct a BuildEvent for a target level event
-     *
-     * @param target the target that emitted the event.
-     */
-    public BuildEvent(Target target) {
-        super(target);
-        this.workspace = target.getProject().getWorkspace();
-        this.project = target.getProject();
-        this.target = target;
-        this.task = null;
-    }
-
-    /**
-     * Construct a BuildEvent for a task level event
-     *
-     * @param task the task that emitted the event.
-     */
-    public BuildEvent(Task task) {
-        super(task);
-        this.workspace = task.getProject().getWorkspace();
-        this.project = task.getProject();
-        this.target = task.getTarget();
-        this.task = task;
-    }
-
-    public void setMessage(String message, int priority) {
-        this.message = message;
-        this.priority = priority;
-    }
-
-    public void setException(BuildException exception) {
-        this.exception = exception;
-    }
-
-    /**
-     *  Returns the project that fired this event.
-     */
-    public Project getProject() {
-        return project;
-    }
-
-    /**
-     *  Returns the target that fired this event.
-     */
-    public Target getTarget() {
-
-        return target;
-    }
-
-    /**
-     *  Returns the task that fired this event.
-     */
-    public Task getTask() {
-        return task;
-    }
-
-    /**
-     *  Returns the logging message. This field will only be set
-     *  for "messageLogged" events.
-     *
-     *  @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.
-     *
-     *  @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.
-     *
-     *  @see BuildListener#taskFinished(BuildEvent)
-     *  @see BuildListener#targetFinished(BuildEvent)
-     *  @see BuildListener#buildFinished(BuildEvent)
-     */
-    public BuildException getException() {
-        return exception;
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/BuildException.java b/proposal/antfarm/core/org/apache/tools/ant/BuildException.java
deleted file mode 100644
index bf29e8b..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/BuildException.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-/**
- *  Indicates that an error during the build, such as a compiler error,
- *  a typo in a build file, etc. Errors resulting from coding
- *  errors within ant or a misconfigured setup should use
- *  AntException.
- *
- *  @see AntException
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class BuildException extends Exception {
-    private String location;
-
-    /**
-     *  Constructs a new exception with the specified message.
-     */
-    public BuildException(String message) {
-        super(message);
-    }
-
-    /**
-     *  Constructs a new exception with the specified message and location.
-     */
-    public BuildException(String message, String location) {
-        super(message);
-
-        this.location = location;
-    }
-
-    /**
-     *  Returns the location in the build file where this error.
-     *  occured.
-     */
-    public String getLocation() {
-        return location;
-    }
-
-    /**
-     *  Sets the location in the build file where this error occured.
-     */
-    public void setLocation(String location) {
-        this.location = location;
-    }
-
-    public String toString() {
-        return (location == null) ? getMessage() : (location + ": " + getMessage());
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/BuildListener.java b/proposal/antfarm/core/org/apache/tools/ant/BuildListener.java
deleted file mode 100644
index e9f16db..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/BuildListener.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-import java.util.EventListener;
-
-/**
- *  Objects that implement this interface can be notified when
- *  things happened during a build.
- *
- *  @see BuildEvent
- *  @see Project#addBuildListener(BuildListener)
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public interface BuildListener extends EventListener {
-
-    /**
-     *  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 before a project file is parsed.
-     */
-    public void importStarted(BuildEvent event);
-
-    /**
-     *  Fired after a project file is parsed.
-     */
-    public void importFinished(BuildEvent event);
-
-    /**
-     *  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);
-
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/ExitException.java b/proposal/antfarm/core/org/apache/tools/ant/ExitException.java
deleted file mode 100644
index 414d0b3..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/ExitException.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-/**
- *  Thrown by the AntSecurityManager whenever a task tries
- *  to call System.exit().
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class ExitException extends RuntimeException {
-    private int status;
-
-    public ExitException(int status) {
-        this.status = status;
-    }
-
-    public int getStatus() {
-        return status;
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/Import.java b/proposal/antfarm/core/org/apache/tools/ant/Import.java
deleted file mode 100644
index 4ea4f46..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/Import.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-/**
- *  Represents an import statement from a project.
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class Import {
-    private Project project;
-    private String name;
-    private String location;
-
-    public Import(Project project, String name) {
-        this.project = project;
-        this.name = name;
-        this.location = location;
-    }
-
-    public Project getProject() {
-        return project;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getLocation() {
-        return location;
-    }
-
-    public void setLocation(String location) {
-        this.location = location;
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/Importer.java b/proposal/antfarm/core/org/apache/tools/ant/Importer.java
deleted file mode 100644
index b561a47..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/Importer.java
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-import java.util.*;
-
-/**
- *  Used by a workspace to read project files.
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public interface Importer {
-    public void importProject(Project project) throws BuildException;
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/Load.java b/proposal/antfarm/core/org/apache/tools/ant/Load.java
deleted file mode 100644
index 7825ddc..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/Load.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-import java.net.*;
-
-/**
- *  The only task that gets loaded by default. It can be used
- *  to dynamically load any other required tasks.
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class Load extends Task {
-    private String name;
-    private String classname;
-
-    public void execute() throws BuildException {
-        try {
-            getWorkspace().debug("Loading " + name);
-            ClassLoader loader = new URLClassLoader(
-                new URL[] { getProject().getBase() },
-                getWorkspace().getClass().getClassLoader());
-
-            getWorkspace().registerTask(name, loader.loadClass(classname));
-        }
-        catch(ClassNotFoundException exc) {
-            throw new BuildException("Class \"" + classname + "\" not found");
-        }
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getClassname() {
-        return classname;
-    }
-
-    public void setClassname(String classname) {
-        this.classname = classname;
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/Project.java b/proposal/antfarm/core/org/apache/tools/ant/Project.java
deleted file mode 100644
index 622bafc..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/Project.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-
-/**
- *  Stores the information for a single project file. Each project
- *  has its own namespace for variable names and target names.
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class Project {
-    private Workspace workspace;
-    private String name;
-    private URL base;
-    private String location;
-    private List imports;
-    private Map targets;
-    private Map variables;
-
-    /**
-     *  Constructs a new project. Should only be called by the Workspace class.
-     */
-    Project(Workspace workspace, String name) {
-        this.workspace = workspace;
-        this.name = name;
-        this.location = null;
-        this.imports = new ArrayList();
-        this.targets = new HashMap();
-        this.variables = new HashMap();
-    }
-
-    /**
-     *  Returns the workspace that this project belongs to.
-     */
-    public Workspace getWorkspace() {
-        return workspace;
-    }
-
-    /**
-     *  Returns the name of this project.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     *  The directory or jar file where this project file was located.
-     */
-    public URL getBase() {
-        return base;
-    }
-
-    /**
-     *  The directory where this project file was located.
-     *
-     *  @throws AntException if this project was loaded from a jar and not a directory.
-     */
-    public File getBaseDir() {
-        if (base.getProtocol().equals("file")) {
-            return new File(base.getFile());
-        }
-        else {
-            throw new AntException(base.toString() + " is not a directory");
-        }
-    }
-
-    public void setBase(URL base) {
-        this.base = base;
-
-        if (base.getProtocol().equals("file")) {
-            variables.put("ant.base.dir", base.getFile());
-        }
-    }
-
-    public String getLocation() {
-        return location;
-    }
-
-    public void setLocation(String location) {
-        this.location = location;
-    }
-
-    /**
-     *  Creates an empty target with the specied name.
-     */
-    public Target createTarget(String name) throws BuildException {
-        Target target = new Target(this, name);
-        Target prevTarget = (Target) targets.put(name, target);
-
-        if (prevTarget != null) {
-            String msg = "Target with name \"" + name + "\" already exists";
-            if (prevTarget.getLocation() != null) {
-                msg = msg + " at " + prevTarget.getLocation();
-            }
-            throw new BuildException(msg);
-        }
-
-        return target;
-    }
-
-    /**
-     *  Returns the target with the specified name.
-     *
-     *  @throws AntException if the target doesn't exist.
-     */
-    public Target getTarget(String name) throws BuildException {
-        Target target = (Target) targets.get(name);
-        if (target == null) {
-            throw new BuildException("Target \"" + name + "\" not found");
-        }
-        return target;
-    }
-
-    public Collection getTargets() {
-        return targets.values();
-    }
-
-    /**
-     *  Indicates the this project relies on variables or targets in another project.
-     */
-    public Import createImport(String name) {
-        Import imp = new Import(this, name);
-        imports.add(imp);
-        return imp;
-    }
-
-    /**
-     *  Returns the list of projects that this project imports.
-     */
-    public List getImports() {
-        return imports;
-    }
-
-    /**
-     *  Returns the value of the variable. Variables from other
-     *  projects may be referenced by using the ':' operator.
-     */
-    public String getVariable(String name) throws BuildException {
-        int pos = name.indexOf(Workspace.SCOPE_SEPARATOR);
-        if (pos == -1) {
-            String value = (String) variables.get(name);
-            if (value == null) {
-                throw new BuildException("Variable \"" + name + "\" not defined");
-            }
-            return value;
-        }
-        else {
-            String projectName = name.substring(0, pos);
-            String variableName = name.substring(pos + 1);
-            Project project = workspace.getProject(projectName);
-            return project.getVariable(variableName);
-        }
-    }
-
-    /**
-     *  Sets the value of the variable. Variables from other
-     *  projects may be referenced by using the ':' operator.
-     */
-    public void setVariable(String name, String value) throws BuildException {
-        int pos = name.indexOf(Workspace.SCOPE_SEPARATOR);
-        if (pos == -1) {
-            variables.put(name, value);
-        }
-        else {
-            String projectName = name.substring(0, pos);
-            String variableName = name.substring(pos + 1);
-            Project project = workspace.getProject(projectName);
-            project.setVariable(variableName, value);
-        }
-    }
-
-    public char getPathSeparator() {
-        return ':';
-    }
-}
diff --git a/proposal/antfarm/core/org/apache/tools/ant/Target.java b/proposal/antfarm/core/org/apache/tools/ant/Target.java
deleted file mode 100644
index ddf4a94..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/Target.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-import java.util.*;
-
-/**
- *  Represents a set of actions to be executed, which may or may
- *  not depend on other sets of actions.
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class Target {
-    private Project project;
-    private String name;
-    private String location;
-    private List tasks;
-    private List depends;
-
-    /**
-     *  Called by the Project class to create new targets.
-     */
-    Target(Project project, String name) {
-        this.project = project;
-        this.name = name;
-        this.location = null;
-        this.tasks = new ArrayList();
-        this.depends = new ArrayList();
-    }
-
-    public Project getProject() {
-        return project;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getLocation() {
-        return location;
-    }
-
-    public void setLocation(String location) {
-        this.location = location;
-    }
-
-    public List getTasks() {
-        return tasks;
-    }
-
-    public void addDepend(String depend) {
-        // If no project was specified, use this target's project
-        if (depend.indexOf(Workspace.SCOPE_SEPARATOR) == -1) {
-            depend = getProject().getName() + Workspace.SCOPE_SEPARATOR + depend;
-        }
-        depends.add(depend);
-    }
-
-    public List getDepends() {
-        return depends;
-    }
-
-    /**
-     *  Creates a task proxy for this target. The proxy will
-     *  be converted into an actual task object at build time.
-     */
-    public TaskProxy createTaskProxy(String name) {
-        TaskProxy proxy = new TaskProxy(this, name);
-        tasks.add(proxy);
-        return proxy;
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/Task.java b/proposal/antfarm/core/org/apache/tools/ant/Task.java
deleted file mode 100644
index cacae8b..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/Task.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-/**
- *  Abstract superclass for all task objects. Any class that
- *  extends this class can be plugged into a workspace by using the "load"
- *  task.
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public abstract class Task {
-    private Workspace workspace;
-    private Project project;
-    private Target target;
-
-    public abstract void execute() throws BuildException;
-
-    public Workspace getWorkspace() {
-        return workspace;
-    }
-
-    void setWorkspace(Workspace workspace) {
-        this.workspace = workspace;
-    }
-
-    public Project getProject() {
-        return project;
-    }
-
-    void setProject(Project project) {
-        this.project = project;
-    }
-
-    public Target getTarget() {
-        return target;
-    }
-
-    void setTarget(Target target) {
-        this.target = target;
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/TaskData.java b/proposal/antfarm/core/org/apache/tools/ant/TaskData.java
deleted file mode 100644
index 7d49bc4..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/TaskData.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-import java.beans.*;
-import java.lang.reflect.*;
-import java.util.*;
-
-/**
- *  This class stores info about a bean's properties so that
- *  the actual bean can be instantiated at a later time. This data
- *  is used to store info about a task, since the actual
- *  task class might not be loaded until after parsing is completed.
- *
- *  @see TaskProxy
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class TaskData {
-    private TaskProxy proxy;
-    private String location;
-    private String text;
-    private Map properties;
-
-    /**
-     *  Constructs a new TaskData under the specified task.
-     */
-    public TaskData(TaskProxy proxy) {
-        this.proxy = proxy;
-        this.location = null;
-        this.properties = new HashMap();
-    }
-
-    /**
-     *  Returns the task proxy that this data is associated with.
-     */
-    public TaskProxy getTaskProxy() {
-        return proxy;
-    }
-
-    /**
-     *  Returns the location in the build fiole where this data was defined.
-     */
-    public String getLocation() {
-        return location;
-    }
-
-    /**
-     *  Returns the location in the build fiole where this data was defined.
-     */
-    public void setLocation(String location) {
-        this.location = location;
-    }
-
-    /**
-     *  Sets the text for this bean data, for cases where the bean is a simple
-     *  type like String or int.
-     */
-    public void setText(String text) {
-        this.text = text;
-    }
-
-
-    /**
-     *  Sets the value of a property on the bean. Multiple properties can be
-     *  added with the same name only if the property on the bean is an array.
-     */
-    public TaskData addProperty(String name) {
-        TaskData data = new TaskData(proxy);
-        getProperties(name).add(data);
-        return data;
-    }
-
-    /**
-     *  Returns the list of property values for the specified name.
-     */
-    private List getProperties(String name) {
-        List result = (List) properties.get(name);
-        if (result == null) {
-            result = new ArrayList();
-            properties.put(name, result);
-        }
-        return result;
-    }
-
-    /**
-     *  Creates a new bean instance and initializes its properties.
-     */
-    public Object createBean(Class type) throws BuildException {
-        Object bean = null;
-
-        // See if an editor exists for this type
-        PropertyEditor editor = PropertyEditorManager.findEditor(type);
-
-        if (editor == null) {
-            // We don't know how to handle text for types without editors
-            if (text != null) {
-                throw new BuildException("Unexpected text \"" + text + "\"", location);
-            }
-
-            try {
-                bean = type.newInstance();
-            }
-            catch(InstantiationException exc) {
-                throw new AntException("Unable to instantiate " + type.getName(), exc);
-            }
-            catch(IllegalAccessException exc) {
-                throw new AntException("Unable to access constructor for " + type.getName(), exc);
-            }
-        }
-        else {
-            try {
-                // Let the editor parse the text
-                editor.setAsText(parseVariables(text));
-            }
-            catch(NumberFormatException exc) {
-                throw new BuildException("\"" + text + "\" is not a valid number", location);
-            }
-
-            bean = editor.getValue();
-        }
-
-        // Update the fields on the bean
-        updateProperties(bean);
-
-        return bean;
-    }
-
-    /**
-     *  Sets all of the property values on the bean.
-     */
-    private void updateProperties(Object bean) throws BuildException {
-
-        // Call setProperty for each property that's been defined
-        Iterator itr = properties.entrySet().iterator();
-        while (itr.hasNext()) {
-            Map.Entry entry = (Map.Entry) itr.next();
-            String name = (String) entry.getKey();
-            List values = (List) entry.getValue();
-            setProperty(bean, name, values);
-        }
-    }
-
-    /**
-     *  Finds the PropertyDescriptor for the specifed property and sets it.
-     */
-    private void setProperty(Object bean, String name, List value) throws BuildException {
-        PropertyDescriptor[] descriptors = getPropertyDescriptors(bean.getClass());
-
-        // Search for the property with the matching name
-        for (int i = 0; i < descriptors.length; i++) {
-            if (descriptors[i].getName().equals(name)) {
-                setProperty(bean, descriptors[i], value);
-                return;
-            }
-        }
-
-        throw new BuildException("Unexpected attribute \"" + name + "\"", location);
-    }
-
-    /**
-     *  Sets a single property on a bean.
-     */
-    private static void setProperty(Object obj, PropertyDescriptor descriptor, List values) throws BuildException {
-        Object value = null;
-
-        Class type = descriptor.getPropertyType();
-
-        if (type.isArray()) {
-            value = createBeans(type.getComponentType(), values);
-        }
-        else if (values.size() == 1) {
-            TaskData data = (TaskData) values.get(0);
-            value = data.createBean(type);
-
-        }
-
-        try {
-            descriptor.getWriteMethod().invoke(obj, new Object[] { value });
-        }
-        catch(IllegalAccessException exc) {
-            throw new AntException("Unable to access write method for \"" + descriptor.getName() + "\"", exc);
-        }
-        catch(InvocationTargetException exc) {
-            throw new AntException("Unable to set property \"" + descriptor.getName() + "\"", exc.getTargetException());
-        }
-    }
-
-    /**
-     *  Creates a number of beans with the same type using the list of TaskData's
-     */
-    private static Object[] createBeans(Class type, List values) throws BuildException {
-        Object[] beans = (Object[]) Array.newInstance(type, values.size());
-        int i = 0;
-        Iterator itr = values.iterator();
-        while (itr.hasNext()) {
-            TaskData data = (TaskData) itr.next();
-            beans[i++] = data.createBean(type);
-        }
-        return beans;
-    }
-
-    /**
-     *  Uses the Introspector class to lookup the property descriptors for the class.
-     */
-    private static PropertyDescriptor[] getPropertyDescriptors(Class type) {
-        try {
-            return Introspector.getBeanInfo(type, Object.class).getPropertyDescriptors();
-        }
-        catch(IntrospectionException exc) {
-            throw new AntException("Unable to get bean info for " + type.getName());
-        }
-    }
-
-    /**
-     *  Replaces any variables in the input string with their values.
-     */
-    private String parseVariables(String input) throws BuildException {
-        StringBuffer output = new StringBuffer();
-
-        int start = 0;
-        int end = 0;
-        while ((start = input.indexOf('{', end)) != -1) {
-            output.append(input.substring(end,start));
-            end = input.indexOf('}', start);
-            if (end != -1) {
-                String name = input.substring(++start, end++);
-                String value = proxy.getTarget().getProject().getVariable(name);
-                if (value == null) {
-                    throw new BuildException("The variable \"" + name + "\" has not been defined");
-                }
-                output.append(value);
-            }
-        }
-
-        output.append(input.substring(end));
-
-        return output.toString();
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/TaskProxy.java b/proposal/antfarm/core/org/apache/tools/ant/TaskProxy.java
deleted file mode 100644
index 13e7f0e..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/TaskProxy.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-/**
- *  This class stores the information needed to
- *  instantiate a task object. It basically consists of
- *  the task name and a TaskData object, which stores the
- *  values of the fields.
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class TaskProxy {
-    private Target target;
-    private String name;
-    private TaskData data;
-    private String location;
-
-    public TaskProxy(Target target, String name) {
-        this.target = target;
-        this.name = name;
-        this.data = new TaskData(this);
-    }
-
-    public Target getTarget() {
-        return target;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getLocation() {
-        return location;
-    }
-
-    public void setLocation(String location) {
-        this.location = location;
-    }
-
-    public TaskData getData() {
-        return data;
-    }
-
-    /**
-     *  Finds the class for this task name, and creates an
-     *  instance of it using TaskData.createBean().
-     */
-    public Task createTask() throws BuildException {
-        Class type = target.getProject().getWorkspace().getTaskClass(name);
-        return (Task) data.createBean(type);
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/Workspace.java b/proposal/antfarm/core/org/apache/tools/ant/Workspace.java
deleted file mode 100644
index 4cc99c0..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/Workspace.java
+++ /dev/null
@@ -1,449 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant;
-
-import java.util.*;
-
-/**
- *  The main class in the Ant class hierarchy. A workspace contains
- *  multiple projects, which in turn contain multiple targets, which
- *  in turn contain multiple task proxies. The workspace also handles
- *  the sorting and execution of targets during a build.
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class Workspace {
-    public static final char SCOPE_SEPARATOR = ':';
-
-    private Importer importer;
-    private Map projects;
-    private Map tasks;
-    private List listeners;
-
-    private Task currentTask = null;
-
-    /**
-     *  Constructs new Ant workspace with no projects. The only
-     *  task that will be registered is the "load" task.
-     *
-     *  The importer is used to handle the actual reading of build files.
-     *  In theory, different importers could be used to read project info from
-     *  DOM trees, serialized objects, databases, etc.
-     */
-    public Workspace(Importer importer) {
-        this.importer = importer;
-        this.projects = new HashMap();
-        this.tasks = new HashMap();
-        this.listeners = new ArrayList();
-
-        registerTask("load", Load.class);
-    }
-
-    /**
-     *  Assigns a task class to a name.
-     */
-    public void registerTask(String name, Class type) {
-        tasks.put(name, type);
-    }
-
-    /**
-     *  Returns the class for a task with the specified name.
-     */
-    public Class getTaskClass(String name) throws BuildException {
-        Class type = (Class) tasks.get(name);
-        if (type == null) {
-            throw new BuildException("No task named \"" + name + "\" has been loaded");
-        }
-        return type;
-    }
-
-    /**
-     *  Creates a project with the specified name. The project initially
-     *  contains no targets.
-     */
-    public Project createProject(String name) {
-        Project project = new Project(this, name);
-        projects.put(name, project);
-        return project;
-    }
-
-    /**
-     *  Returns the project with the specified name, or throws
-     *  an exception if no project exists with that name.
-     */
-    public Project getProject(String name) throws BuildException {
-        Project project = (Project) projects.get(name);
-        if (project == null) {
-            throw new BuildException("Project \"" + name + "\" not found");
-        }
-        return project;
-    }
-
-    /**
-     *  Builds all of the targets in the list. Target names must
-     *  be of the form projectname:targetname.
-     */
-    public boolean build(List fullNames) throws BuildException {
-
-        // This lets the tasks intercept System.exit() calls
-        SecurityManager sm = System.getSecurityManager();
-        System.setSecurityManager(new AntSecurityManager());
-
-        fireBuildStarted();
-
-        try {
-            // Parse the project files...
-            importTargets(fullNames);
-
-            // ...figure out the build order...
-            List toDoList = sortTargets(fullNames);
-
-            // ...and build the targets
-            Iterator itr = toDoList.iterator();
-            while (itr.hasNext()) {
-                Target target = (Target) itr.next();
-                buildTarget(target);
-            }
-            fireBuildFinished(null);
-            return true;
-        }
-        catch(BuildException exc) {
-            fireBuildFinished(exc);
-            return false;
-        }
-        finally {
-            System.setSecurityManager(sm);
-        }
-    }
-
-    /**
-     *  Adds a listener to the workspace.
-     */
-    public void addBuildListener(BuildListener listener) {
-        listeners.add(listener);
-    }
-
-    /**
-     *  Removes a listener to the workspace.
-     */
-    public void removeBuildListener(BuildListener listener) {
-        listeners.remove(listener);
-    }
-
-    /**
-     *  Fires a messageLogged event with DEBUG priority
-     */
-    public void debug(String message) {
-        fireMessageLogged(message, BuildEvent.DEBUG);
-    }
-
-    /**
-     *  Fires a messageLogged event with INFO priority
-     */
-    public void info(String message) {
-        fireMessageLogged(message, BuildEvent.INFO);
-    }
-
-    /**
-     *  Fires a messageLogged event with WARN priority
-     */
-    public void warn(String message) {
-        fireMessageLogged(message, BuildEvent.WARN);
-    }
-
-    /**
-     *  Fires a messageLogged event with ERROR priority
-     */
-    public void error(String message) {
-        fireMessageLogged(message, BuildEvent.ERROR);
-    }
-
-    /**
-     *  Imports into the workspace all of the projects required to
-     *  build a set of targets.
-     */
-    private void importTargets(List fullNames) throws BuildException {
-        Iterator itr = fullNames.iterator();
-        while (itr.hasNext()) {
-            String fullName = (String) itr.next();
-            String projectName = getProjectName(fullName);
-            importProject(projectName);
-        }
-    }
-
-    /**
-     *  Imports the project into the workspace, as well as any others
-     *  that the project depends on.
-     */
-    public Project importProject(String projectName) throws BuildException {
-        Project project = (Project) projects.get(projectName);
-
-        // Don't parse a project file more than once
-        if (project == null) {
-
-            // Parse the project file
-            project = createProject(projectName);
-
-            fireImportStarted(project);
-            try {
-                importer.importProject(project);
-                fireImportFinished(project, null);
-            }
-            catch(BuildException exc) {
-                fireImportFinished(project, exc);
-                throw exc;
-            }
-
-            // Parse any imported projects as well
-            Iterator itr = project.getImports().iterator();
-            while (itr.hasNext()) {
-                Import imp = (Import) itr.next();
-                importProject(imp.getName());
-            }
-        }
-
-        return project;
-    }
-
-
-
-    /**
-     *  Builds a specific target. This assumes that the targets it depends
-     *  on have already been built.
-     */
-    private void buildTarget(Target target) throws BuildException {
-        fireTargetStarted(target);
-
-        try {
-            List tasks = target.getTasks();
-            Iterator itr = tasks.iterator();
-            while (itr.hasNext()) {
-                TaskProxy proxy = (TaskProxy) itr.next();
-                executeTask(target, proxy);
-            }
-
-            fireTargetFinished(target, null);
-        }
-        catch(BuildException exc) {
-            fireTargetFinished(target, null);
-            throw exc;
-        }
-    }
-
-    /**
-     *  Instantiates the task from the proxy and executes.
-     */
-    private void executeTask(Target target, TaskProxy proxy) throws BuildException {
-        Task task = proxy.createTask();
-        task.setWorkspace(this);
-        task.setProject(target.getProject());
-        task.setTarget(target);
-
-        fireTaskStarted(task);
-        currentTask = task;
-        try {
-            task.execute();
-
-            fireTaskFinished(task, null);
-        }
-        catch(BuildException exc) {
-            exc.setLocation(proxy.getLocation());
-            fireTaskFinished(task, exc);
-            throw exc;
-        }
-        finally {
-            currentTask = null;
-        }
-    }
-
-    /**
-     *  Does a topological sort on a list of target names. Returns
-     *  a list of Target objects in the order to be executed.
-     */
-    private List sortTargets(List fullNames) throws BuildException {
-        List results = new ArrayList();
-        sortTargets(results, new Stack(), fullNames);
-        return results;
-    }
-
-    private void sortTargets(List results, Stack visited, List fullNames) throws BuildException {
-        Iterator itr = fullNames.iterator();
-        while (itr.hasNext()) {
-            String fullName = (String) itr.next();
-
-            // Check for cycles
-            if (visited.contains(fullName)) {
-                throwCyclicDependency(visited, fullName);
-            }
-
-            // Check if we're already added this target to the list
-            Target target = getTarget(fullName);
-            if (results.contains(target)) {
-                continue;
-            }
-
-            visited.push(fullName);
-            sortTargets(results, visited, target.getDepends());
-            results.add(target);
-            visited.pop();
-        }
-    }
-
-    /**
-     *  Creates and throws an exception indicating a cyclic dependency.
-     */
-    private void throwCyclicDependency(Stack visited, String fullName) throws BuildException {
-        StringBuffer msg = new StringBuffer("Cyclic dependency: ");
-        for (int i = 0; i < visited.size(); i++) {
-            msg.append((String)visited.get(i));
-            msg.append(" -> ");
-        }
-        msg.append(fullName);
-        throw new BuildException(msg.toString());
-    }
-
-    /**
-     *  Parses the full target name into is project and target components,
-     *  then locates the Target object.
-     */
-    private Target getTarget(String fullName) throws BuildException {
-        String projectName = getProjectName(fullName);
-        String targetName = getTargetName(fullName);
-
-        Project project = (Project) projects.get(projectName);
-        if (project == null) {
-            throw new BuildException("Project \"" + projectName + "\" not found");
-        }
-
-        Target target = project.getTarget(targetName);
-        if (target == null) {
-            throw new BuildException("Target \"" + fullName + "\" not found");
-        }
-
-        return target;
-    }
-
-    /**
-     *  Returns the project portion of a full target name.
-     */
-    public static String getProjectName(String fullName) throws BuildException {
-        int pos = fullName.indexOf(SCOPE_SEPARATOR);
-        if (pos == -1 || pos == 0) {
-            throw new BuildException("\"" + fullName + "\" is not a valid target name");
-        }
-
-        return fullName.substring(0, pos);
-    }
-
-    /**
-     *  Returns the target portion of a full target name.
-     */
-    public static String getTargetName(String fullName) throws BuildException {
-        int pos = fullName.indexOf(SCOPE_SEPARATOR);
-        if (pos == -1 || pos == 0) {
-            throw new BuildException("\"" + fullName + "\" is not a valid target name");
-        }
-
-        return fullName.substring(pos + 1);
-    }
-
-    private void fireMessageLogged(String message, int priority) {
-        BuildEvent event;
-        if (currentTask == null) {
-            event = new BuildEvent(this);
-        }
-        else {
-            event = new BuildEvent(currentTask);
-        }
-        event.setMessage(message, priority);
-
-        Iterator itr = listeners.iterator();
-        while (itr.hasNext()) {
-            BuildListener listener = (BuildListener) itr.next();
-            listener.messageLogged(event);
-        }
-    }
-
-    private void fireBuildStarted() {
-        Iterator itr = listeners.iterator();
-        while (itr.hasNext()) {
-            BuildListener listener = (BuildListener) itr.next();
-            BuildEvent event = new BuildEvent(this);
-            listener.buildStarted(event);
-        }
-    }
-
-    private void fireBuildFinished(BuildException exc) {
-        BuildEvent event = new BuildEvent(this);
-        event.setException(exc);
-
-        Iterator itr = listeners.iterator();
-        while (itr.hasNext()) {
-            BuildListener listener = (BuildListener) itr.next();
-            listener.buildFinished(event);
-        }
-    }
-
-    private void fireImportStarted(Project project) {
-        BuildEvent event = new BuildEvent(project);
-
-        Iterator itr = listeners.iterator();
-        while (itr.hasNext()) {
-            BuildListener listener = (BuildListener) itr.next();
-            listener.importStarted(event);
-        }
-    }
-
-    private void fireImportFinished(Project project, BuildException exc) {
-        BuildEvent event = new BuildEvent(project);
-        event.setException(exc);
-
-        Iterator itr = listeners.iterator();
-        while (itr.hasNext()) {
-            BuildListener listener = (BuildListener) itr.next();
-            listener.importFinished(event);
-        }
-    }
-
-    private void fireTargetStarted(Target target) {
-        BuildEvent event = new BuildEvent(target);
-
-        Iterator itr = listeners.iterator();
-        while (itr.hasNext()) {
-            BuildListener listener = (BuildListener) itr.next();
-            listener.targetStarted(event);
-        }
-    }
-
-    private void fireTargetFinished(Target target, BuildException exc) {
-        BuildEvent event = new BuildEvent(target);
-        event.setException(exc);
-
-        Iterator itr = listeners.iterator();
-        while (itr.hasNext()) {
-            BuildListener listener = (BuildListener) itr.next();
-            listener.targetFinished(event);
-        }
-    }
-
-    private void fireTaskStarted(Task task) {
-        BuildEvent event = new BuildEvent(task);
-
-        Iterator itr = listeners.iterator();
-        while (itr.hasNext()) {
-            BuildListener listener = (BuildListener) itr.next();
-            listener.taskStarted(event);
-        }
-    }
-
-    private void fireTaskFinished(Task task, BuildException exc) {
-        BuildEvent event = new BuildEvent(task);
-        event.setException(exc);
-
-        Iterator itr = listeners.iterator();
-        while (itr.hasNext()) {
-            BuildListener listener = (BuildListener) itr.next();
-            listener.taskFinished(event);
-        }
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/cmdline/DefaultLogger.java b/proposal/antfarm/core/org/apache/tools/ant/cmdline/DefaultLogger.java
deleted file mode 100644
index 893351f..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/cmdline/DefaultLogger.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant.cmdline;
-
-import java.io.*;
-import org.apache.tools.ant.*;
-
-/**
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class DefaultLogger implements BuildListener {
-    private PrintStream out;
-
-    public DefaultLogger(PrintStream out) {
-        this.out = out;
-    }
-
-    public void buildStarted(BuildEvent event) {
-    }
-
-    public void buildFinished(BuildEvent event) {
-        BuildException exc = event.getException();
-        out.println();
-        if (exc == null) {
-            out.println("BUILD SUCCESSFUL");
-        }
-        else {
-            out.println("BUILD FAILED");
-            out.println();
-            out.println(exc);
-        }
-    }
-
-    public void importStarted(BuildEvent event) {
-        out.println("Importing: " + event.getProject().getName());
-    }
-
-    public void importFinished(BuildEvent event) {
-    }
-
-    public void targetStarted(BuildEvent event) {
-        out.println("\n[" + event.getProject().getName() + ":" + event.getTarget().getName() + "]");
-    }
-
-    public void targetFinished(BuildEvent event) {
-    }
-
-    public void taskStarted(BuildEvent event) {
-    }
-
-    public void taskFinished(BuildEvent event) {
-    }
-
-    public void messageLogged(BuildEvent event) {
-        out.println("    " + event.getMessage());
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/core/org/apache/tools/ant/cmdline/Main.java b/proposal/antfarm/core/org/apache/tools/ant/cmdline/Main.java
deleted file mode 100644
index 5f26e6b..0000000
--- a/proposal/antfarm/core/org/apache/tools/ant/cmdline/Main.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant.cmdline;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import org.apache.tools.ant.*;
-
-/**
- *  Runs the command line version of ant. Takes a list of
- *  fully qualified targets and builds them.
- *  Any jars in the "tasks" directory will be automatically added
- *  to the project path.
- *
- *  @author <a href="mailto:mpfoemme@thoughtworks.com">Matthew Foemmel</a>
- */
-public class Main {
-
-    /**
-     *  Builds the specified targets.
-     */
-    public static void main(String[] args) {
-        File installDir = findInstallDir();
-        setupProjectPath(installDir);
-        Importer importer = loadImporter(installDir);
-
-        Workspace workspace = new Workspace(importer);
-        workspace.addBuildListener(new DefaultLogger(System.out));
-
-        List targets = Arrays.asList(args);
-
-        try {
-            if (workspace.build(targets)) {
-                System.exit(0);
-            }
-            else {
-                System.exit(1);
-            }
-        }
-        catch(Exception exc) {
-            exc.printStackTrace();
-            System.exit(2);
-        }
-    }
-
-    /**
-     *  Finds the ant.jar file in the classpath.
-     */
-    private static File findInstallDir() {
-        StringTokenizer itr = new StringTokenizer(
-            System.getProperty("java.class.path"),
-            System.getProperty("path.separator"));
-
-        while (itr.hasMoreTokens()) {
-            File file = new File(itr.nextToken());
-            if (file.getName().equals("ant.jar")) {
-                // Found it
-                File dir = file.getParentFile();
-                if (dir == null) {
-                    dir = new File(".");
-                }
-                return dir;
-            }
-        }
-
-        System.err.println("Unable to locate ant.jar");
-        System.exit(1);
-        return null;
-    }
-
-    /**
-     *  Locates the "tasks" directory relative to the ant.jar file.
-     */
-    private static void setupProjectPath(File installDir) {
-        StringBuffer path = new StringBuffer(System.getProperty("ant.project.path", "."));
-
-        File taskDir = new File(installDir, "tasks");
-        if (taskDir.exists()) {
-            File[] taskjars = taskDir.listFiles();
-            for (int i = 0; i < taskjars.length; i++) {
-                path.append(System.getProperty("path.separator"));
-                path.append(taskjars[i].getPath());
-            }
-        }
-
-        System.setProperty("ant.project.path", path.toString());
-        System.out.println(path.toString());
-    }
-
-    /**
-     *  Creates a class loader using the jars from the "xml" directory, and
-     *  loads the XmlImporter class.
-     */
-    private static Importer loadImporter(File installDir) {
-        File xmlDir = new File(installDir, "xml");
-        if (xmlDir.exists()) {
-            File[] xmlJars = xmlDir.listFiles();
-            URL[] urls = new URL[xmlJars.length];
-            for (int i = 0; i < xmlJars.length; i++) {
-                try {
-                    urls[i] = xmlJars[i].toURL();
-                }
-                catch(MalformedURLException exc) {
-                    exc.printStackTrace();
-                }
-            }
-
-            try {
-                URLClassLoader loader = new URLClassLoader(urls);
-                return (Importer) loader.loadClass("org.apache.tools.ant.xml.XmlImporter").newInstance();
-            }
-            catch(Exception exc) {
-                exc.printStackTrace();
-                System.exit(1);
-            }
-        }
-        else {
-            System.err.println("Unable to find xml directory");
-            System.exit(1);
-        }
-
-        return null;
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/readme.txt b/proposal/antfarm/readme.txt
deleted file mode 100644
index 36789bb..0000000
--- a/proposal/antfarm/readme.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-*** Installing ***
-
-To get things started you'll need to run the bootstrap.bat file, which will manually compile a version of ant into the "boot" directory. From then on you can use Ant to build Ant by running the build.bat file. (There aren't any unix scripts yet, unfortunately. Any help here would be appreciated!)
-
-To "install" ant, you just need to have the ant.jar file in your classpath. Ant will figure out the rest. To run it, type:
-
-java ant project:target
-
-When ant is run, the Main class scans the classpath to find the ant.jar file, and can figure out from there where the rest of the files are. In particular, the jars in the "tasks" directory get added to the project path automatically. And the jars in the "xml" directory get loaded using a separate class loader, so that they don't conflict with the xml parsers that various tasks might be using.
-
-
-*** Running ***
-
-For now, the targets specified con the command line must be in the form project:target. For example, if you want to build target "all" in file "foo.ant", the target name would be "foo:all". In the future there will be a way to specify the default project, so that only the target name would need to be specified. 
-
-Ant searches along the "project path" to find projects specified on the command line or in "import" statements. The project path defaults to ".", ie the current directory, but can be overridden by setting the "ant.project.path" system property. Variables and targets from other projects can be accessed by prefixing them with the project name and a colon.
-
-
-*** Concepts ***
-
-The main thing I'd like people to check out is the whole workspace concept, ie the ability to pull multiple ant files into a single build. I personally think this will make it easier to reuse ant files from other projects, and avoid recursive make syndrome at the same time. Plus, I think this model lends itself to CJAN implementation quite nicely.
-
-I've also tried to make the tasks more compliant with the javabean spec. As a result of this, the word "property" became so overloaded that I decided to use the term "variable" for values defined in ant projects. If anyone feels strongly about it I'll change it back.
-
-The depends attribute on targets uses a whitespace delimited list of target names, instead of comma separated. This is more consistent with the "list" datatype in the xml schema spec.
-
-The parser is namespace aware, and attributes for any namespace other than the default namespace are ignored.
-
-The code relies heavily on JDK 1.2 features. Making it JDK 1.1 compatible would be a lot of work, but is definitely doable.
-
-There's obviously a lot of stuff missing from this prototype, such as datatypes, real tasks, a way to access system properties, default targets, etc. If enough people like the basic design I'll start tackling those next...
-
diff --git a/proposal/antfarm/tasks/java2sdk.ant b/proposal/antfarm/tasks/java2sdk.ant
deleted file mode 100644
index fa6b451..0000000
--- a/proposal/antfarm/tasks/java2sdk.ant
+++ /dev/null
@@ -1,10 +0,0 @@
-<project name="java2sdk">
-	<target name="init">
-		<load name="echo" classname="org.apache.tools.ant.tasks.Echo"/>
-		<load name="javacloader" classname="org.apache.tools.ant.tasks.JavacLoader"/>
-		<javacloader/>
-		<load name="jar" classname="org.apache.tools.ant.tasks.Jar"/>
-		<load name="set" classname="org.apache.tools.ant.tasks.SetVariable"/>
-		<load name="copy" classname="org.apache.tools.ant.tasks.Copy"/>
-	</target>
-</project>
\ No newline at end of file
diff --git a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Copy.java b/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Copy.java
deleted file mode 100644
index 2e89172..0000000
--- a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Copy.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant.tasks;
-
-import java.io.*;
-import org.apache.tools.ant.*;
-
-public class Copy extends Task {
-    private String src;
-    private String dest;
-
-    public void execute() throws BuildException {
-        try {
-            FileInputStream in = new FileInputStream(src);
-            FileOutputStream out = new FileOutputStream(dest);
-
-            byte[] buf = new byte[4096];
-            int len = 0;
-            while ((len = in.read(buf)) != -1) {
-                out.write(buf, 0, len);
-            }
-        }
-        catch(FileNotFoundException exc) {
-            throw new BuildException("File not found");
-        }
-        catch(IOException exc) {
-            throw new AntException("Error copying files", exc);
-        }
-    }
-
-    public String getSrc() {
-        return src;
-    }
-
-    public void setSrc(String src) {
-        this.src = src;
-    }
-
-    public String getDest() {
-        return dest;
-    }
-
-    public void setDest(String dest) {
-        this.dest = dest;
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Echo.java b/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Echo.java
deleted file mode 100644
index 06cebfc..0000000
--- a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Echo.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant.tasks;
-
-import org.apache.tools.ant.*;
-
-public class Echo extends Task {
-    private String message;
-
-    public void execute() throws BuildException {
-        System.out.println(message);
-    }
-
-    public String getMessage() {
-        return message;
-    }
-
-    public void setMessage(String message) {
-        this.message = message;
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Fileset.java b/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Fileset.java
deleted file mode 100644
index d6da3b2..0000000
--- a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Fileset.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant.tasks;
-
-import java.io.*;
-import java.util.*;
-import org.apache.tools.ant.*;
-
-public class Fileset {
-    private String src;
-
-    public String getSrc() {
-        return src;
-    }
-
-    public void setSrc(String src) {
-        this.src = src;
-    }
-
-    public void getFiles(List results) throws BuildException {
-        if (src == null) {
-            throw new BuildException("Missing property \"src\"", null); //LOCATION
-        }
-
-        File dir = new File(src);
-        if (!dir.exists()) {
-            throw new BuildException(src + " does not exist", null); // LOCATION!!!
-        }
-        getFiles(dir, results);
-    }
-
-    private void getFiles(File file, List results) {
-        if (file.isDirectory()) {
-            File[] files = file.listFiles();
-            for (int i = 0; i < files.length; i++) {
-                getFiles(files[i], results);
-            }
-        }
-        else if (file.getPath().endsWith(".java")) {
-            results.add(file.getPath());
-        }
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Jar.java b/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Jar.java
deleted file mode 100644
index 315e91c..0000000
--- a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Jar.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant.tasks;
-
-import java.io.*;
-import java.lang.reflect.*;
-import java.util.*;
-import org.apache.tools.ant.*;
-
-public class Jar extends Task {
-    private String jarfile;
-    private String basedir;
-    private String manifest;
-
-    public String getJarfile() {
-        return jarfile;
-    }
-
-    public void setJarfile(String jarfile) {
-        this.jarfile = jarfile;
-    }
-
-    public String getBasedir() {
-        return basedir;
-    }
-
-    public void setBasedir(String basedir) {
-        this.basedir = basedir;
-    }
-
-    public String getManifest() {
-        return manifest;
-    }
-
-    public void setManifest(String manifest) {
-        this.manifest = manifest;
-    }
-
-    public void execute() throws BuildException {
-        File dir = new File(jarfile).getParentFile();
-        if (dir != null) {
-            dir.mkdirs();
-        }
-        List argList = new ArrayList();
-        if (manifest == null) {
-            argList.add("-cf");
-        }
-        else {
-            argList.add("-cmf");
-            argList.add(manifest);
-        }
-        argList.add(jarfile);
-        argList.add("-C");
-        argList.add(basedir);
-        argList.add(".");
-
-        String[] args = (String[]) argList.toArray(new String[argList.size()]);
-
-        try {
-            Class type = getClass().getClassLoader().loadClass("sun.tools.jar.Main");
-            Method method = type.getMethod("main", new Class[] { args.getClass() });
-
-            getWorkspace().info("Running jar...");
-
-            method.invoke(null, new Object[] { args });
-        }
-        catch(InvocationTargetException exc) {
-            Throwable cause = exc.getTargetException();
-            if (cause instanceof ExitException) {
-                if (((ExitException)cause).getStatus() != 0) {
-                    throw new BuildException("Build failed");
-                }
-            }
-            else {
-                throw new AntException("Error running jar", exc);
-            }
-        }
-        catch(ClassNotFoundException exc) {
-            throw new AntException("Jar class not found. Makes sure tools.jar is in your classpath");
-        }
-        catch(Exception exc) {
-            throw new AntException("Error running jar", exc);
-        }
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Javac.java b/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Javac.java
deleted file mode 100644
index eaed496..0000000
--- a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/Javac.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant.tasks;
-
-import java.lang.reflect.*;
-import java.io.*;
-import java.util.*;
-import org.apache.tools.ant.*;
-
-public class Javac extends Task {
-    private Fileset[] fileset;
-    private String dest;
-    private String classpath;
-    private String compilerclass = null;
-
-    public void execute() throws BuildException {
-        if (compilerclass == null) {
-            compilerclass = "com.sun.tools.javac.Main";
-        }
-
-        List argList = new ArrayList();
-        argList.add("-d");
-        argList.add(dest);
-
-        if (classpath != null) {
-            argList.add("-classpath");
-
-            // Replace the project's path separator with the system's path separator
-            argList.add(classpath.replace(getProject().getPathSeparator(), File.pathSeparatorChar));
-        }
-
-        for (int i = 0; i < fileset.length; i++) {
-            fileset[i].getFiles(argList);
-        }
-
-        String[] args = (String[]) argList.toArray(new String[argList.size()]);
-
-        try {
-            new File(dest).mkdirs();
-
-            Class type = getClass().getClassLoader().loadClass(compilerclass);
-            Method method = type.getMethod("main", new Class[] { args.getClass() });
-
-            getWorkspace().info("Running javac...");
-
-            method.invoke(null, new Object[] { args });
-        }
-        catch(InvocationTargetException exc) {
-            Throwable cause = exc.getTargetException();
-            if (cause instanceof ExitException) {
-                if (((ExitException)cause).getStatus() != 0) {
-                    throw new BuildException("Compile failed");
-                }
-            }
-            else {
-                throw new AntException("Error running compiler", exc);
-            }
-        }
-        catch(ClassNotFoundException exc) {
-            throw new BuildException("Compiler class not found. Makes sure tools.jar is in your classpath");
-        }
-        catch(IllegalAccessException exc) {
-            throw new AntException("Unable to access compiler class", exc);
-        }
-        catch(NoSuchMethodException exc) {
-            throw new AntException("Unable to find main method on compiler class", exc);
-        }
-    }
-
-    public String getDest() {
-        return dest;
-    }
-
-    public void setDest(String dest) {
-        this.dest = dest;
-    }
-
-    public String getClasspath() {
-        return classpath;
-    }
-
-    public void setClasspath(String classpath) {
-        this.classpath = classpath;
-    }
-
-    public Fileset[] getFileset() {
-        return fileset;
-    }
-
-    public void setFileset(Fileset[] fileset) {
-        this.fileset = fileset;
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/JavacLoader.java b/proposal/antfarm/tasks/org/apache/tools/ant/tasks/JavacLoader.java
deleted file mode 100644
index 7c7d0fc..0000000
--- a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/JavacLoader.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant.tasks;
-
-import java.io.*;
-import java.net.*;
-import org.apache.tools.ant.*;
-
-public class JavacLoader extends Task {
-    public void execute() throws BuildException {
-        try {
-            URL toolsJar = findToolsJar();
-            ClassLoader loader = new URLClassLoader(
-                new URL[] { getProject().getBase(), toolsJar },
-                getWorkspace().getClass().getClassLoader());
-
-            getWorkspace().registerTask("javac", loader.loadClass("org.apache.tools.ant.tasks.Javac"));
-        }
-        catch(MalformedURLException exc) {
-            throw new AntException("Bad URL", exc);
-        }
-        catch(ClassNotFoundException exc) {
-            throw new BuildException("Class not found");
-        }
-    }
-
-    private URL findToolsJar() throws MalformedURLException {
-        // I assume this won't work everywhere...
-        return new File(new File(System.getProperty("java.home")), "../lib/tools.jar").toURL();
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/SetVariable.java b/proposal/antfarm/tasks/org/apache/tools/ant/tasks/SetVariable.java
deleted file mode 100644
index e1f6a8f..0000000
--- a/proposal/antfarm/tasks/org/apache/tools/ant/tasks/SetVariable.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant.tasks;
-
-import org.apache.tools.ant.*;
-
-public class SetVariable extends Task {
-    private String name;
-    private String value;
-
-    public void execute() throws BuildException {
-        getProject().setVariable(name, 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;
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/xml/org/apache/tools/ant/xml/ProjectHandler.java b/proposal/antfarm/xml/org/apache/tools/ant/xml/ProjectHandler.java
deleted file mode 100644
index ef561d7..0000000
--- a/proposal/antfarm/xml/org/apache/tools/ant/xml/ProjectHandler.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant.xml;
-
-import java.io.*;
-import java.util.*;
-import javax.xml.parsers.*;
-import org.apache.tools.ant.*;
-import org.xml.sax.*;
-import org.xml.sax.ext.*;
-import org.xml.sax.helpers.*;
-
-/**
- *  This class populates a Project object via SAX events.
- */
-public class ProjectHandler extends DefaultHandler /* implements LexicalHandler */ {
-    private Workspace workspace;
-    private Project project;
-    private Locator locator;
-
-    /**
-     *  The top of this stack represents the "current" event handler.
-     */
-    private Stack handlers;
-
-    /**
-     * Constructs a SAX handler for the specified project.
-     */
-    public ProjectHandler(Project project) {
-        this.project = project;
-        this.workspace = project.getWorkspace();
-        this.handlers = new Stack();
-        this.handlers.push(new RootHandler());
-    }
-
-    public Project getProject() {
-        return project;
-    }
-
-    public void setDocumentLocator(Locator locator) {
-        this.locator = locator;
-    }
-
-    protected String getLocation() {
-        return locator.getPublicId() + ":" + locator.getLineNumber();
-    }
-
-    public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
-        // Delegate to the current handler
-        ((ContentHandler)handlers.peek()).startElement(namespaceURI, localName, qName, atts);
-    }
-
-    public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
-        // Delegate to the current handler
-        ((ContentHandler)handlers.peek()).endElement(namespaceURI, localName, qName);
-    }
-
-    public void characters(char[] ch, int start, int length) {
-        //XXX need to implement text content
-    }
-
-    public void processingInstruction(String target, String data) {
-        System.out.println("@" + target + "@" + data + "@");
-    }
-
-    /*
-    public void comment(char[] ch, int start, int length) {)
-    public void endCDATA() {}
-    public void endDTD() {}
-    public void endEntity(java.lang.String name) {}
-    public void startCDATA() {}
-    public void startDTD(String name, String publicId, String systemId) {}
-    public void startEntity(java.lang.String name)  {}
-    */
-
-    /**
-     * This class handles any top level SAX events.
-     */
-    private class RootHandler extends DefaultHandler {
-        public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
-            if (isAntNamespace(namespaceURI) && localName.equals("project")) {
-                handlers.push(new ProjectElemHandler(qName, atts));
-            }
-            else {
-                throw new SAXParseException("Unexpected element \"" + qName + "\"", locator);
-            }
-        }
-
-        public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
-            handlers.pop();
-        }
-    }
-
-    /**
-     *  This class handles events that occur with a "project" element.
-     */
-    private class ProjectElemHandler extends DefaultHandler {
-        public ProjectElemHandler(String qName, Attributes atts) throws SAXException {
-            String projectName = null;
-
-            for (int i = 0; i < atts.getLength(); i++) {
-                if (!isAntNamespace(atts.getURI(i))) {
-                    continue;
-                }
-
-                String name = atts.getQName(i);
-                String value = atts.getValue(i);
-                if (name.equals("name")) {
-                    projectName = value;
-                }
-                else {
-                    throw new SAXParseException("Unexpected attribute \"" + name + "\"", locator);
-                }
-            }
-
-            if (projectName == null) {
-                throw new SAXParseException("Missing attribute \"name\"", locator);
-            }
-
-            if (!projectName.equals(project.getName())) {
-                throw new SAXParseException("A project named \"" + projectName + "\" must be located in a file called \"" + projectName + ".ant\"", locator);
-            }
-        }
-
-        public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
-            if (isAntNamespace(namespaceURI) && localName.equals("target")) {
-                handlers.push(new TargetElemHandler(project, qName, atts));
-            }
-            else if (isAntNamespace(namespaceURI) && localName.equals("import")) {
-                handlers.push(new ImportElemHandler(project, qName, atts));
-            }
-            else {
-                throw new SAXParseException("Unexpected element \"" + qName + "\"", locator);
-            }
-        }
-
-        public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
-            handlers.pop();
-        }
-    }
-
-    /**
-     *  This class handles events that occur with a "target" element.
-     */
-    private class TargetElemHandler extends DefaultHandler {
-        private Target target;
-
-        public TargetElemHandler(Project project, String qName, Attributes atts) throws SAXException {
-            String targetName = null;
-            String dependencies = "";
-
-            for (int i = 0; i < atts.getLength(); i++) {
-                if (!isAntNamespace(atts.getURI(i))) {
-                    continue;
-                }
-
-                String name = atts.getQName(i);
-                String value = atts.getValue(i);
-                if (name.equals("name")) {
-                    targetName = value;
-                }
-                else if (name.equals("depends")) {
-                    dependencies = value;
-                }
-                else {
-                    throw new SAXParseException("Unexpected attribute \"" + name + "\"", locator);
-                }
-            }
-
-            if (targetName == null) {
-                throw new SAXParseException("Missing attribute \"name\"", locator);
-            }
-
-            try {
-                target = project.createTarget(targetName);
-                target.setLocation(getLocation());
-                parseDepends(dependencies);
-            }
-            catch(BuildException exc) {
-                throw new SAXException(exc);
-            }
-        }
-
-        /**
-         *  Parses the list of space-separated project names.
-         */
-        private void parseDepends(String depends) {
-            StringTokenizer tokenizer = new StringTokenizer(depends);
-            while (tokenizer.hasMoreTokens()) {
-                String targetName = tokenizer.nextToken();
-                target.addDepend(targetName);
-            }
-        }
-
-        public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
-            if (!isAntNamespace(namespaceURI)) {
-                throw new SAXParseException("Unexpected attribute \"" + qName + "\"", locator);
-            }
-
-            TaskProxy proxy = target.createTaskProxy(qName);
-            proxy.setLocation(getLocation());
-            handlers.push(new TaskElemHandler(proxy.getData(), qName, atts));
-        }
-
-        public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
-            handlers.pop();
-        }
-    }
-
-    /**
-     *  This class handles events that occur with a "import" element.
-     */
-    private class ImportElemHandler extends DefaultHandler {
-        public ImportElemHandler(Project project, String qName, Attributes atts) throws SAXException {
-            String importName = null;
-
-            for (int i = 0; i < atts.getLength(); i++) {
-                if (!isAntNamespace(atts.getURI(i))) {
-                    continue;
-                }
-
-                String name = atts.getQName(i);
-                String value = atts.getValue(i);
-                if (name.equals("name")) {
-                    importName = value;
-                }
-                else {
-                    throw new SAXParseException("Unexpected attribute \"" + name + "\"", locator);
-                }
-            }
-
-            if (importName == null) {
-                throw new SAXParseException("Missing attribute \"name\"",  locator);
-            }
-
-            Import imp = project.createImport(importName);
-            imp.setLocation(getLocation());
-        }
-
-        public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
-            throw new SAXParseException("Unexpected element \"" + qName + "\"", locator);
-        }
-
-        public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
-            handlers.pop();
-        }
-    }
-
-    /**
-     *  This class handles events that occur with a task element.
-     */
-    private class TaskElemHandler extends DefaultHandler {
-        private TaskData data;
-
-        public TaskElemHandler(TaskData data, String qName, Attributes atts) throws SAXException {
-            this.data = data;
-
-            for (int i = 0; i < atts.getLength(); i++) {
-                if (!isAntNamespace(atts.getURI(i))) {
-                    continue;
-                }
-
-                String name = atts.getQName(i);
-                String value = atts.getValue(i);
-                TaskData child = data.addProperty(name);
-                child.setLocation(getLocation());
-                child.setText(value);
-            }
-        }
-
-        public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
-            if (!isAntNamespace(namespaceURI)) {
-                throw new SAXParseException("Unexpected element \"" + qName + "\"", locator);
-            }
-
-            TaskData child = data.addProperty(qName);
-            child.setLocation(getLocation());
-            handlers.push(new TaskElemHandler(child, qName, atts));
-        }
-
-        public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
-            handlers.pop();
-        }
-    }
-
-    private static boolean isAntNamespace(String uri) {
-        return uri == null ? false : uri.equals("");
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/xml/org/apache/tools/ant/xml/XmlExporter.java b/proposal/antfarm/xml/org/apache/tools/ant/xml/XmlExporter.java
deleted file mode 100644
index 1a4f12d..0000000
--- a/proposal/antfarm/xml/org/apache/tools/ant/xml/XmlExporter.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.apache.tools.ant.xml;
-
-import java.io.*;
-import java.util.*;
-import org.apache.tools.ant.*;
-
-public class XmlExporter {
-    public void exportProject(Project project, Writer out) throws IOException {
-        out.write("<project name=\"" + project.getName() + "\">\n");
-
-        Iterator itr = project.getTargets().iterator();
-        while (itr.hasNext()) {
-            Target target = (Target) itr.next();
-            writeTarget(target, out);
-        }
-
-        out.write("</project>\n");
-    }
-
-    private void writeTarget(Target target, Writer out) throws IOException {
-        out.write("\t<target name=\"" + target.getName() + "\" depends=\"" + concat(target.getDepends()) + ">\n");
-        out.write("\t</target>\n");
-    }
-
-    public String concat(List depends) throws IOException {
-        StringBuffer buf = new StringBuffer();
-        Iterator itr = depends.iterator();
-        while (itr.hasNext()) {
-            String depend = (String) itr.next();
-            buf.append(depend);
-            if (itr.hasNext()) {
-                buf.append(" ");
-            }
-        }
-        return buf.toString();
-    }
-
-    public static void main(String[] args) throws Exception {
-        Workspace workspace = new Workspace(new XmlImporter());
-        Project project = workspace.importProject("ant");
-        Writer out = new OutputStreamWriter(System.out);
-        new XmlExporter().exportProject(project, out);
-        out.flush();
-    }
-}
\ No newline at end of file
diff --git a/proposal/antfarm/xml/org/apache/tools/ant/xml/XmlImporter.java b/proposal/antfarm/xml/org/apache/tools/ant/xml/XmlImporter.java
deleted file mode 100644
index 5db0ccf..0000000
--- a/proposal/antfarm/xml/org/apache/tools/ant/xml/XmlImporter.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/* Copyright (c) 2000 The Apache Software Foundation */
-
-package org.apache.tools.ant.xml;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import javax.xml.parsers.*;
-import org.apache.tools.ant.*;
-import org.xml.sax.*;
-
-/**
- *  This class knows how to locate xml project files
- *  and import them into the workspace.
- */
-public class XmlImporter implements Importer {
-    private URL[] path;
-
-    /**
-     *  Constructs an importer for a workspace.
-     */
-    public XmlImporter() {
-        this.path = getProjectPath();
-    }
-
-    /**
-     *  Imports the project with the specified name.
-     */
-    public void importProject(Project project) throws BuildException {
-        // Locate the project file
-        URLConnection conn = findProjectFile(project);
-
-        // Parse the xml
-        parseProjectFile(project, conn);
-    }
-
-    /**
-     *  Find the .ant file for this project. Searches each directory and
-     *  jar in the project path.
-     */
-    private URLConnection findProjectFile(Project project) throws BuildException {
-        String fileName = project.getName() + ".ant";
-        for (int i = 0; i < path.length; i++) {
-            try {
-                URL url = new URL(path[i], fileName);
-                URLConnection conn = url.openConnection();
-                conn.connect();
-                project.setBase(path[i]);
-                project.setLocation(url.toString());
-                return conn;
-            }
-            catch(FileNotFoundException exc) {
-                // The file ins't in this directory/jar, keep looking
-            }
-            catch(IOException exc) {
-                // Not sure what to do here...
-                exc.printStackTrace();
-            }
-        }
-
-        throw new BuildException("Project \"" + project.getName() + "\" not found");
-    }
-
-    /**
-     *  Parse the xml file.
-     */
-    private void parseProjectFile(Project project, URLConnection conn) throws BuildException {
-        ProjectHandler handler = new ProjectHandler(project);
-
-        try {
-            InputSource source = new InputSource(conn.getInputStream());
-            source.setPublicId(conn.getURL().toString());
-            SAXParser parser = parserFactory.newSAXParser();
-            /* parser.getXMLReader().setProperty("http://xml.org/sax/properties/lexical-handler", handler);  */
-            parser.parse(source, handler);
-        }
-        catch(SAXParseException exc) {
-            if (exc.getException() instanceof BuildException) {
-                throw (BuildException) exc.getException();
-            }
-
-            throw new BuildException(exc.getMessage(), exc.getPublicId() + ":" + exc.getLineNumber());
-        }
-        catch(SAXException exc) {
-            if (exc.getException() instanceof BuildException) {
-                throw (BuildException) exc.getException();
-            }
-            else {
-                throw new AntException("Parse error", exc);
-            }
-        }
-        catch(ParserConfigurationException exc) {
-            throw new AntException("Parser configuration error", exc);
-        }
-        catch(FileNotFoundException exc) {
-            // This should never happen, since conn.connect()
-            // has already been called successfully
-            throw new AntException("Project file not found", exc);
-        }
-        catch(IOException exc) {
-            throw new AntException("Error reading project file", exc);
-        }
-
-        return;
-    }
-
-    /**
-     *  Parses the project path (specified using the "ant.project.path"
-     *  system propertyinto URL objects.
-     */
-    private static URL[] getProjectPath() {
-        String s = System.getProperty("ant.project.path", ".");
-
-        StringTokenizer tokens = new StringTokenizer(s, System.getProperty("path.separator"));
-        int i = 0;
-        URL[] path = new URL[tokens.countTokens()];
-        while (tokens.hasMoreTokens()) {
-            String token = tokens.nextToken();
-
-            try {
-                if (token.endsWith(".jar")) {
-                    path[i] = new URL("jar:file:" + token + "!/");
-                }
-                else if (token.endsWith("/")) {
-                    path[i] = new URL("file:" + token);
-                }
-                else {
-                    path[i] = new URL("file:" + token + "/");
-                }
-            }
-            catch(MalformedURLException exc) {
-                exc.printStackTrace();
-            }
-
-            i++;
-        }
-
-        return path;
-    }
-
-
-    /**
-     * JAXP stuff.
-     */
-    private static SAXParserFactory parserFactory;
-
-    static {
-        parserFactory = SAXParserFactory.newInstance();
-        parserFactory.setValidating(false);
-        parserFactory.setNamespaceAware(true);
-    }
-}
diff --git a/proposal/frantic/build.bat b/proposal/frantic/build.bat
deleted file mode 100755
index da96ae4..0000000
--- a/proposal/frantic/build.bat
+++ /dev/null
@@ -1,55 +0,0 @@
-@echo off
-rem --------------------------------------------------------------------------
-rem build.bat - Build Script for Frantic (lifted from Tomcat...thx guys)
-rem
-rem Environment Variable Prerequisites:
-rem
-rem   JAVA_HOME        Must point at your Java Development Kit [REQUIRED]
-rem
-rem ---------------------------------------------------------------------------
-
-
-rem ----- Save Environment Variables ------------------------------------------
-
-set _CLASSPATH=%CLASSPATH%
-set _CLASSES=%CLASSES%
-
-rem ----- Verify and Set Required Environment Variables -----------------------
-
-if not "%JAVA_HOME%" == "" goto gotJavaHome
-echo You must set JAVA_HOME to point at your Java Development Kit installation
-goto cleanup
-:gotJavaHome
-
-rem ----- Set Up The Runtime Classpath ----------------------------------------
-
-if not "%CLASSPATH%" == "" set CLASSPATH=%CLASSPATH%;
-set CLASSPATH=%CLASSPATH%;./src
-
-rem ----- Execute The Requested Build -----------------------------------------
-
-if not exist dist mkdir dist
-if not exist dist\lib mkdir dist\lib
-if not exist dist\lib\classes mkdir dist\lib\classes
-if not exist dist\doc mkdir dist\doc
-if not exist dist\doc\api mkdir dist\doc\api
-
-set CLASSES=dist\lib\classes
-
-%JAVA_HOME%\bin\javac -d %CLASSES% src/org/apache/ant/test/*.java
-%JAVA_HOME%\bin\jar cvf dist\lib\frantic.jar -C dist\lib\classes .
-
-xcopy website\*.html dist\doc /s /y
-xcopy website\*.gif dist\doc /s /y
-
-%JAVA_HOME%\bin\javadoc -protected -sourcepath src -d dist\doc\api -author org.apache.ant org.apache.ant.engine org.apache.ant.tasks org.apache.ant.tasks.build org.apache.ant.tasks.util
-
-rem ----- Restore Environment Variables ---------------------------------------
-:cleanup
-set CLASSPATH=%_CLASSPATH%
-set CLASSES=%_CLASSES%
-set _CLASSPATH=
-set _CLASSES=
-
-:finish
-
diff --git a/proposal/frantic/src/org/apache/ant/AntException.java b/proposal/frantic/src/org/apache/ant/AntException.java
deleted file mode 100644
index 17763b1..0000000
--- a/proposal/frantic/src/org/apache/ant/AntException.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999, 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", "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;
-
-public class AntException extends Exception {
-    
-    public AntException() {
-        super();
-    }
-    
-    public AntException(String message) {
-        super(message);
-    }
-}
diff --git a/proposal/frantic/src/org/apache/ant/engine/AntEngineListener.java b/proposal/frantic/src/org/apache/ant/engine/AntEngineListener.java
deleted file mode 100644
index 7839d64..0000000
--- a/proposal/frantic/src/org/apache/ant/engine/AntEngineListener.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999, 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", "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.engine;
-
-
-import java.util.*;
-import org.apache.ant.AntException;
-import org.apache.ant.tasks.Task;
-
-public interface AntEngineListener extends EventListener {
-    
-    void engineStart(AntEvent e);
-    void engineFinish(AntEvent e);
-    
-    void taskStart(AntEvent e);
-    void taskExecute(AntEvent e);
-    void taskFinish(AntEvent e);
-    void taskMessage(AntEvent e, String message);
-    void taskException(AntEvent e, AntException exception);
-    
-}
diff --git a/proposal/frantic/src/org/apache/ant/engine/AntEvent.java b/proposal/frantic/src/org/apache/ant/engine/AntEvent.java
deleted file mode 100644
index f14d1f7..0000000
--- a/proposal/frantic/src/org/apache/ant/engine/AntEvent.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999, 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", "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.engine;
-
-
-import java.util.EventObject;
-import org.apache.ant.tasks.Task;
-
-public class AntEvent extends EventObject {
-    
-    Task task;
-    
-    public AntEvent(Object source) {
-        this(source, null);
-    }
-    
-    public AntEvent(Object source, Task task) {
-        super(source);
-        this.task = task;
-    }
-    
-    public Task getTask() {
-        return task;
-    }
-    
-    public void setTask(Task task) {
-        this.task = task;
-    }
-}
diff --git a/proposal/frantic/src/org/apache/ant/engine/DefaultEngineListener.java b/proposal/frantic/src/org/apache/ant/engine/DefaultEngineListener.java
deleted file mode 100644
index 6ccda43..0000000
--- a/proposal/frantic/src/org/apache/ant/engine/DefaultEngineListener.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999, 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", "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.engine;
-
-
-import java.io.*;
-import java.text.*;
-import java.util.*;
-import org.apache.ant.AntException;
-import org.apache.ant.tasks.Task;
-
-public class DefaultEngineListener implements AntEngineListener {
-    
-    protected PrintStream       outputStream;
-    protected long              startTime;
-    
-    protected StringBuffer      sb              = new StringBuffer();
-    protected int               indentSpaces    = 4;
-    protected boolean           indent          = true;
-    protected int               curIndent       = 0;
-    
-    protected SimpleDateFormat  timestamp       = new SimpleDateFormat("HH:mm:ss:SSS");
-    
-    public DefaultEngineListener() {
-        this(System.out);
-    }
-    
-    public DefaultEngineListener(PrintStream outputStream) {
-        this.outputStream = outputStream;
-    }
-    
-    public void setIndentSpaces(int spaces) {
-        this.indentSpaces = spaces;
-    }
-    
-    public int getIndentSpaces() {
-        return indentSpaces;
-    }
-    
-    public void setIndent(boolean on) {
-        this.indent = on;
-    }
-    
-    public boolean isIndent() {
-        return indent;
-    }
-    
-    protected String padLeft(String s, int length) {
-        sb.setLength(0);
-        sb.append(s);
-        while (sb.length() < length) {
-            sb.insert(0, ' ');
-        }
-        return sb.toString();
-    }
-    
-    protected void output(String message) {
-        if (!indent) {
-            outputStream.println(message);
-            return;
-        }
-        
-        // shouldn't happen, but let's be on the safe side
-        if (curIndent < 0) {
-            curIndent = 0;
-        }
-        
-        outputStream.println(
-                             padLeft(message, message.length() + (indentSpaces * curIndent)));
-    }
-    
-    ////////////////////////////////////////////////////////////////////////////
-    //                     AntEngineListener Implementation                   //
-    ////////////////////////////////////////////////////////////////////////////
-    
-    public void engineStart(AntEvent e) {
-        Date now = new Date();
-        output("Engine Started: " + timestamp.format(now));
-        startTime = now.getTime();
-    }
-    
-    public void engineFinish(AntEvent e) {
-        Date now = new Date();
-        long elapsed = System.currentTimeMillis() - startTime;
-        
-        output("Engine Finished: " + timestamp.format(now));
-        output("Elapsed Time: " + (elapsed / 1000F) + " seconds");
-    }
-    
-    public void taskStart(AntEvent e) {
-        output("Task Started: " + e.getTask().getFullyQualifiedName());
-        curIndent++;
-    }
-    
-    public void taskExecute(AntEvent e){
-        output("Task Execution: " + e.getTask().getFullyQualifiedName());
-    }
-    
-    public void taskFinish(AntEvent e){
-        curIndent--;
-        output("Task Finished: " + e.getTask().getFullyQualifiedName());
-    }
-    
-    public void taskMessage(AntEvent e, String message){
-        curIndent++;
-        output("Task Message: " + e.getTask().getFullyQualifiedName() + ": " +
-               message);
-        curIndent--;
-    }
-    
-    public void taskException(AntEvent e, AntException exception){
-        output("Task Exception: " + e.getTask().getFullyQualifiedName() + ": " +
-               exception.getMessage());
-    }
-}
diff --git a/proposal/frantic/src/org/apache/ant/engine/HierarchicalHashtable.java b/proposal/frantic/src/org/apache/ant/engine/HierarchicalHashtable.java
deleted file mode 100644
index 5876af3..0000000
--- a/proposal/frantic/src/org/apache/ant/engine/HierarchicalHashtable.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.apache.ant.engine;
-
-import java.util.*;
-
-public class HierarchicalHashtable extends Hashtable {
-    
-    private HierarchicalHashtable parent;
-    
-    public HierarchicalHashtable() {
-        this(null);
-    }
-    
-    public HierarchicalHashtable(HierarchicalHashtable parent) {
-        super();
-        this.parent = parent;
-    }
-    
-    public HierarchicalHashtable getParent() {
-        return parent;
-    }
-    
-    public void setParent(HierarchicalHashtable parent) {
-        this.parent = parent;
-    }
-    
-    public List getPropertyNames() {
-        ArrayList list = new ArrayList();
-        
-        Enumeration e = keys();
-        while (e.hasMoreElements()) {
-            list.add(e.nextElement());
-        }
-        
-        if (getParent() != null) {
-            list.addAll(getParent().getPropertyNames());
-        }
-        
-        return list;
-    }
-    
-    public Object getPropertyValue(String name) {
-        Object value = get(name);
-        if (value == null && getParent() != null) {
-            return getParent().getPropertyValue(name);
-        }
-        return value;
-    }
-    
-    public void setPropertyValue(String name, Object value) {
-        put(name, value);
-    }
-    
-    public void removePropertyValue(String name) {
-        Object value = get(name);
-        if (value == null && getParent() != null) {
-            getParent().removePropertyValue(name);
-        }
-        if (value != null) {
-            remove(name);
-        }
-    }
-}
diff --git a/proposal/frantic/src/org/apache/ant/engine/TaskEngine.java b/proposal/frantic/src/org/apache/ant/engine/TaskEngine.java
deleted file mode 100644
index 6e35fce..0000000
--- a/proposal/frantic/src/org/apache/ant/engine/TaskEngine.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999, 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", "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.engine;
-
-
-import java.util.*;
-import org.apache.ant.AntException;
-import org.apache.ant.tasks.Task;
-
-/**
- * The TaskEngine interface defines the methods that a TaskEngine are required
- * to implement. This interface is also passed to each Task in order for them to
- * get access to some utility functions like inserting a new Task during a run,
- * or forcing the execution path of Tasks to be modified.
- */
-public interface TaskEngine {
-    
-    void addAntEngineListener(AntEngineListener listener);
-    
-    void removeAntEngineListener(AntEngineListener listener);
-    
-    void execute(Task task) throws AntException;
-    
-    void execute(Task root, Task task) throws AntException;
-    
-    void message(Task task, String message);
-    
-    Task getNextExecuteTask();
-    
-    /**
-     * Returns a list of all property names that the current task stack is aware
-     * of. This is a recursive list of all property names.
-     */
-    List getPropertyNames();
-    
-    /**
-     * May be called to obtain property values that have been defined. Property
-     * values are maintained in a hierarchical manner as each task is executed.
-     * When a property is requested, if the current execution level does not
-     * contain the property, the execution parent is then queried. This
-     * continues until there is no where else to go!
-     * <p></p>
-     * Maybe this should be a Hashtable implementation and be able to return
-     * Object? Is that a little overkill considering these values will usually
-     * be Strings? Perhaps someone will have a farfetched idea of storing a
-     * Task in a property?
-     */
-    Object getPropertyValue(String name);
-    
-    /**
-     * Adds the name-value pair to this execution stack property list. If the
-     * property is declared in parent tasks, I don't really see a reason for not
-     * adding it again to this execution list. This would achieve a nice scoped
-     * parameter list that is dictated by nesting levels.
-     * <p></p>
-     * This is against the current Ant (1.2) specification, but I'm not sure why
-     * that restriction was there. It would be simple to implement here if it
-     * again required.
-     */
-    void setPropertyValue(String name, Object value);
-    
-    /**
-     * Removes the given property from the property list. I haven't thought too
-     * much about the rules behind this method. My current thinking is that the
-     * property is removed no matter what level of the execution stack the
-     * property was defined in. I think this should be good in most cases. If it
-     * ever surfaces that the property should just be unavailable for this stack
-     * level (and other's below it), then the implementation can be modified to
-     * keep a list of these "unavailable" properties.
-     */
-    void removePropertyValue(String name);
-    
-}
diff --git a/proposal/frantic/src/org/apache/ant/engine/TaskEngineImpl.java b/proposal/frantic/src/org/apache/ant/engine/TaskEngineImpl.java
deleted file mode 100644
index d1f5749..0000000
--- a/proposal/frantic/src/org/apache/ant/engine/TaskEngineImpl.java
+++ /dev/null
@@ -1,397 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999, 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", "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.engine;
-
-
-import java.util.*;
-import org.apache.ant.AntException;
-import org.apache.ant.tasks.Task;
-
-/**
- * The engine that actually invokes each Task. In addition to specifying a Task
- * to execute, it may be desirable to specify the root Task that will define
- * an execution cycle.
- */
-public class TaskEngineImpl implements TaskEngine {
-    
-    /**
-     * Analagous to a call stack, but with Tasks.
-     */
-    protected Stack taskStack       = new Stack();;
-    
-    /**
-     * As the task stack is built, a mirror representation will also be
-     * contructed that will hold property values.
-     */
-    protected Stack propertyStack   = new Stack();
-    
-    /**
-     * Keeps track of AntEngineListeners. We don't have to use Vector because we
-     * take care of synchronization on the add, remove, and iteration operations.
-     */
-    protected ArrayList listenerList = new ArrayList();
-    
-    private int engineLevel = 0;
-    
-    /**
-     * Constructor is private so it cannot be instantiated. Users of this class
-     * will get an instance by using the getTaskEngine() method. This will allow
-     * us to have a simple Factory implementation. We may use a Singleton
-     * implementation, or a collection pool. The choice is up to us.
-     */
-    private TaskEngineImpl() {
-        super();
-    }
-    
-    /**
-     * Return a usable instance of a TaskEngine to the requestor. Nothing
-     * sophisticated yet, simple doles out a new instance each time.
-     */
-    public static TaskEngine getTaskEngine() {
-        return new TaskEngineImpl();
-    }
-    
-    /**
-     * Walk the list of Tasks backwards until the root is reached. Keep track of
-     * the Tasks along the way in a Stack. Return null if the root Task is not a
-     * parent of the provided Task.
-     */
-    protected Stack getTaskStack(Task root, Task task) {
-        Stack stack = new Stack();
-        while (task != null) {
-            stack.push(task);
-            if (task == root) {
-                return stack;
-            }
-            task = task.getParent();
-        }
-        return null;
-    }
-    
-    /**
-     * Returns the next Task to be executed from the taskStack. The task is not
-     * removed from the Stack.
-     */
-    public Task getNextExecuteTask() {
-        try {
-            return (Task)taskStack.peek();
-        } catch (EmptyStackException esx) {
-            return null;
-        }
-    }
-    
-    /**
-     * If no root is specified, we will assume that the user wants to execute
-     * the Task with no root. This is accomplished by using the Task parameter
-     * as its own root.
-     */
-    public void execute(Task task) throws AntException {
-        execute(task, task);
-    }
-    
-    /**
-     * This is the workhorse, however it has been made to be very simple. Given
-     * the ability to specify a path between root and the target Task, we build
-     * a trail of Tasks to connect the two. Next we execute each Task on the way
-     * between the two Tasks. Once we arrive at the Task to execute, we execute
-     * all of its chlidren.
-     */
-    public void execute(Task root, Task task) throws AntException {
-        fireEngineStart();
-        try {
-            taskStack = getTaskStack(root, task);;
-            if (taskStack == null) {
-                throw new AntException(
-                                       "The execution root Task is not an ancestor of the execution Task.");
-            }
-            
-            // Pop thru the stack and execute each Task we come across.
-            while (!taskStack.isEmpty()) {
-                executeTask(taskStack);
-            }
-        } finally {
-            fireEngineFinish();
-        }
-    }
-    
-    /**
-     * A recursive routine that allows all Tasks in the stack to be executed. At
-     * the same time, the stack may grow to include new Tasks.
-     */
-    protected void executeTask(Stack taskStack) throws AntException {
-        Task task = (Task)taskStack.pop();
-        
-        fireTaskStart(task);
-        try {
-            // Add a new property holder for this task to the property stack. Note
-            // that the parent of the new holder is the current stack head.
-            if (task.isPropertyContainer()) {
-                if (propertyStack.isEmpty()) {
-                    propertyStack.push(new HierarchicalHashtable());
-                } else {
-                    propertyStack.push(new HierarchicalHashtable(
-                                                                 (HierarchicalHashtable)propertyStack.peek()));
-                }
-                
-            }
-            
-            // Allow Task to do whatever it may need to do before touching its
-            // children.
-            task.init(this);
-            
-            // Iterate the Task's children and execute any priority Tasks.
-            Task[] tasks = task.getChildren();
-            for (int i = 0, c = tasks.length; i < c; i++) {
-                if (tasks[i].getExecutionMode() == Task.EXECUTION_MODE_PRIORITY) {
-                    taskStack.push(tasks[i]);
-                    executeTask(taskStack);
-                }
-            }
-            
-            // Allow the Task to validate.
-            task.validate();
-            
-            // Finally, execute the Task.
-            fireTaskExecute(task);
-            task.execute(this);
-            
-            // We can discard the no londer needed property holder.
-            if (task.isPropertyContainer()) {
-                propertyStack.pop();
-            }
-            
-        } catch (AntException ax) {
-            fireTaskException(task, ax);
-        } finally {
-            fireTaskFinish(task);
-        }
-    }
-    
-    /**
-     * Causes an AntEvent to be generated and fired to all listeners.
-     */
-    public void message(Task task, String message) {
-        fireTaskMessage(task, message);
-    }
-    
-    ////////////////////////////////////////////////////////////////////////////
-    //                            Listener Support                            //
-    ////////////////////////////////////////////////////////////////////////////
-    
-    public synchronized void addAntEngineListener(AntEngineListener listener) {
-        if (!listenerList.contains(listener)) {
-            listenerList.add(listener);
-        }
-    }
-    
-    public synchronized void removeAntEngineListener(AntEngineListener listener) {
-        if (listenerList.contains(listener)) {
-            listenerList.remove(listener);
-        }
-    }
-    
-    protected synchronized void fireEngineStart() {
-        if (engineLevel++ > 0) return;
-        AntEvent e = new AntEvent(this);
-        for (int i = 0; i < listenerList.size(); i++) {
-            ((AntEngineListener)listenerList.get(i)).engineStart(e);
-        }
-        
-    }
-    
-    protected synchronized void fireEngineFinish() {
-        if (--engineLevel > 0) return;
-        AntEvent e = new AntEvent(this);
-        for (int i = 0; i < listenerList.size(); i++) {
-            ((AntEngineListener)listenerList.get(i)).engineFinish(e);
-        }
-        
-    }
-    
-    protected synchronized void fireTaskStart(Task task) {
-        AntEvent e = new AntEvent(this, task);
-        for (int i = 0; i < listenerList.size(); i++) {
-            ((AntEngineListener)listenerList.get(i)).taskStart(e);
-        }
-        
-    }
-    
-    protected synchronized void fireTaskExecute(Task task) {
-        AntEvent e = new AntEvent(this, task);
-        for (int i = 0; i < listenerList.size(); i++) {
-            ((AntEngineListener)listenerList.get(i)).taskExecute(e);
-        }
-        
-    }
-    
-    protected synchronized void fireTaskFinish(Task task) {
-        AntEvent e = new AntEvent(this, task);
-        for (int i = 0; i < listenerList.size(); i++) {
-            ((AntEngineListener)listenerList.get(i)).taskFinish(e);
-        }
-        
-    }
-    
-    protected synchronized void fireTaskMessage(Task task, String message) {
-        AntEvent e = new AntEvent(this, task);
-        for (int i = 0; i < listenerList.size(); i++) {
-            ((AntEngineListener)listenerList.get(i)).taskMessage(e, message);
-        }
-        
-    }
-    
-    protected synchronized void fireTaskException(Task task, AntException exception) {
-        AntEvent e = new AntEvent(this, task);
-        for (int i = 0; i < listenerList.size(); i++) {
-            ((AntEngineListener)listenerList.get(i)).taskException(e, exception);
-        }
-        
-    }
-    
-    ////////////////////////////////////////////////////////////////////////////
-    //                        Property Support Methods                        //
-    ////////////////////////////////////////////////////////////////////////////
-    
-    /**
-     * This is the routine that will perform key substitution. Phrase will come
-     * in as "src/${someparam}" and be converted to the appropriate "normalized"
-     * string. I suppose while I'm doing this we should support phrases with
-     * nested keys, such as "src/${build${token}}". Also, we should properly
-     * handle cases where ${someparam} will evaluate to ${anotherparam}.
-     * <p></p>
-     * One thing that will be different from the Ant 1.2 mechanismoccurs when a
-     * parameter value is not found. The substitution routine inserts it back in
-     * the phrase unchanged. I have opted to insert a zero-length string
-     * instead.
-     * <p></p>
-     * I should add a switch to the engine that will give the user the ability
-     * to throw an exception if a key is not found. Pretty easy, except this
-     * method is a strange place for an AntException to be thrown. Perhaps I
-     * should use a RuntimeException instead...
-     * <p></p>
-     * A brief rundown on the logic here:
-     *     I check for the first instances of a key prefix.
-     *     If none found we return the phrase as is.
-     *     If key prefix is found get location of next key prefix and suffix.
-     *     If suffix is found first, we have found a key.
-     *     If there is no suffix, we return the phrase.
-     */
-    static final String KEY_PREFIX = "${";
-    static final String KEY_SUFFIX = "}";
-    protected String substitute(String phrase) {
-        StringBuffer sb = new StringBuffer(phrase);
-        int startPoint = 0;
-        while (startPoint >= 0 && startPoint < phrase.length()) {
-            int pre1 = startPoint + phrase.substring(startPoint).indexOf(KEY_PREFIX);
-            if (pre1 < 0) break;
-            int suf1 = phrase.substring(pre1 + KEY_PREFIX.length()).indexOf(KEY_SUFFIX);
-            if (suf1 < 0) break;
-            suf1 = suf1 + pre1 + KEY_PREFIX.length();
-            int pre2 = phrase.substring(pre1 + KEY_PREFIX.length()).indexOf(KEY_PREFIX);
-            if (pre2 < 0) {
-                pre2 = phrase.length() + 1;
-            } else {
-                pre2 = pre2 + pre1 + KEY_PREFIX.length();
-            }
-            
-            if (suf1 < pre2) {
-                // we have found a token
-                String key = sb.substring(pre1 + KEY_PREFIX.length(), suf1);
-                sb.delete(pre1, suf1 + 1);
-                Object value = getPropertyValueNoSubstitution(key);
-                if (value != null) {
-                    sb.insert(pre1, value.toString());
-                }
-                return substitute(sb.toString());
-            }
-            startPoint = pre2;
-        }
-        return sb.toString();
-    }
-    
-    public List getPropertyNames() {
-        if (propertyStack.isEmpty()) return new ArrayList();
-        HierarchicalHashtable hash = (HierarchicalHashtable)propertyStack.peek();
-        return hash.getPropertyNames();
-    }
-    
-    public Object getPropertyValue(String name) {
-        if (propertyStack.isEmpty()) return null;
-        HierarchicalHashtable hash = (HierarchicalHashtable)propertyStack.peek();
-        Object result = hash.getPropertyValue(name);
-        if (result instanceof String) {
-            return substitute((String)result);
-        } else {
-            return result;
-        }
-    }
-    
-    protected Object getPropertyValueNoSubstitution(String name) {
-        if (propertyStack.isEmpty()) return null;
-        HierarchicalHashtable hash = (HierarchicalHashtable)propertyStack.peek();
-        return hash.getPropertyValue(name);
-    }
-    
-    public void setPropertyValue(String name, Object value) {
-        if (propertyStack.isEmpty()) return;
-        HierarchicalHashtable hash = (HierarchicalHashtable)propertyStack.peek();
-        hash.setPropertyValue(name, value);
-    }
-    
-    public void removePropertyValue(String name) {
-        if (propertyStack.isEmpty()) return;
-        HierarchicalHashtable hash = (HierarchicalHashtable)propertyStack.peek();
-        hash.remove(name);
-    }
-}
diff --git a/proposal/frantic/src/org/apache/ant/tasks/BaseTask.java b/proposal/frantic/src/org/apache/ant/tasks/BaseTask.java
deleted file mode 100644
index 3cf4a2a..0000000
--- a/proposal/frantic/src/org/apache/ant/tasks/BaseTask.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999, 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", "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.tasks;
-
-
-
-import java.util.*;
-import org.apache.ant.AntException;
-import org.apache.ant.engine.TaskEngine;
-import org.apache.ant.tasks.Task;
-
-public abstract class BaseTask implements Task {
-    
-    protected Task parent;
-    protected ArrayList children = new ArrayList();
-    protected String taskName;
-    protected Properties properties = new Properties();
-    
-    public BaseTask() {
-        super();
-    }
-    
-    public void init(TaskEngine engine) throws AntException {
-    }
-    
-    public void execute(TaskEngine engine) throws AntException {
-    }
-    
-//    abstract public String getTaskTag();
-    
-    public void validate() throws AntException {}
-    
-    public String getFullyQualifiedName() {
-        if (getParent() == null) return Task.NAME_SEPARATOR + taskName;
-        return getParent().getFullyQualifiedName() + Task.NAME_SEPARATOR + taskName;
-    }
-    
-    public int hashCode() {
-        return getFullyQualifiedName().hashCode();
-    }
-    
-    public String getTaskName() {
-        return taskName;
-    }
-    
-    public void setTaskName(String taskName) {
-        this.taskName = taskName;
-    }
-    
-    public int getExecutionMode() {
-        return Task.EXECUTION_MODE_PRIORITY;
-    }
-    
-    public String getAttributeValue(String name) {
-        /**@todo: Implement this org.apache.ant.Task method*/
-        throw new java.lang.UnsupportedOperationException("Method getAttributeValue() not yet implemented.");
-    }
-    
-    public Task getParent() {
-        return parent;
-    }
-    
-    /**
-     * We have to trust the developers to not screw up the hierarchy by changing
-     * the parent of a Task when it is a child of another.
-     */
-    public void setParent(Task parent) {
-        this.parent = parent;
-    }
-    
-    public Task[] getChildren() {
-        return (Task[])children.toArray(new Task[children.size()]);
-    }
-    
-    public void addChild(Task task) {
-        children.add(task);
-        task.setParent(this);
-    }
-    
-    public void removeChild(Task task) {
-        children.remove(task);
-    }
-    
-    public Task getRootTask() {
-        if (getParent() != null) {
-            return getParent().getRootTask();
-        }
-        return this;
-    }
-    
-    protected Task getTaskByName(String taskName) {
-        Task[] tasks = getChildren();
-        for (int i = 0, c = tasks.length; i < c; i++) {
-            if (tasks[i].getTaskName().equals(taskName)) {
-                return tasks[i];
-            }
-        }
-        return null;
-    }
-    
-    public Task getTask(String taskPath) {
-        taskPath = taskPath.trim();
-        int slashPos = taskPath.indexOf("/");
-        
-        // starts with '/'
-        if (slashPos == 0) {
-            return getRootTask().getTask(taskPath.substring(slashPos + 1));
-        } else
-            
-            // starts with '../'
-            if (taskPath.startsWith("../") || taskPath.equals("..")) {
-                return getParent().getTask(taskPath.substring(3));
-            } else
-                
-                // starts with './'
-                if (taskPath.startsWith("./") || taskPath.equals(".")) {
-                    return getTask(taskPath.substring(2));
-                } else
-                    
-                    // starts with 'some_level/'
-                    if (slashPos > 0) {
-                        String levelName = taskPath.substring(0, slashPos);
-                        return getTaskByName(levelName).getTask(taskPath.substring(slashPos + 1));
-                    }
-        
-        // there are no more directories; what remains is the name of the task
-        if (slashPos < 0) {
-            if (taskPath.length() == 0) return this;
-            return getTaskByName(taskPath);
-        }
-        return null;
-    }
-    
-    public boolean isPropertyContainer() {
-        return false;
-    }
-    
-}
diff --git a/proposal/frantic/src/org/apache/ant/tasks/Task.java b/proposal/frantic/src/org/apache/ant/tasks/Task.java
deleted file mode 100644
index 4c96c7a..0000000
--- a/proposal/frantic/src/org/apache/ant/tasks/Task.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999, 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", "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.tasks;
-
-
-import java.util.*;
-import org.apache.ant.AntException;
-import org.apache.ant.engine.TaskEngine;
-
-/**
- * Task is the core interface for all structures that will be processed by the
- * TaskEngine.
- */
-public interface Task {
-    
-    public static final int EXECUTION_MODE_IMPLICIT = 0;
-    public static final int EXECUTION_MODE_EXPLICIT = 1;
-    public static final int EXECUTION_MODE_PRIORITY = 2;
-    
-    public static final char NAME_SEPARATOR = '/';
-    
-    /**
-     * Causes the existing Task implementation to execute.
-     */
-    void execute(TaskEngine engine) throws AntException;
-    
-    /**
-     * Called when the Task first gets "noticed" by the TaskEngine.
-     */
-    void init(TaskEngine engine) throws AntException;
-    
-    /**
-     * Each Task should have the ability to validate its state. This would be
-     * invoked by the TaskEngine prior to commencing an execution cycle.
-     */
-    void validate() throws AntException;
-    
-    /**
-     * Just a simple name used to identify a Task. This name is only sufficient
-     * for simple debugging and GUI output. It does not uniquely identify a
-     * Task.
-     *
-     * @see #getFullyQualifiedName
-     */
-    String getTaskName();
-    
-    /**
-     * Although this method seems to tie the concept of XML "tags", it is not
-     * necessarily so. The tag name will serve as a general description of the
-     * type of tag represented by this class instance. It is primarily used by
-     * Tasks with sub-Tasks that are not assigned to a specific class
-     * implementation.
-     *
-     * @see org.apache.ant.tasks.UnknownTask
-     */
-//    String getTaskTag();
-    
-    /**
-     * A mechanism for locating a task relative to the current task. This
-     * navigation sceme will mimic a typical OS system. '..' will move back
-     * a level in the Task tree. If taskPath begins with '/' then the root node
-     * will be used as a starting point.
-     * <p></p>
-     * Returns null of no task is found at this location.
-     */
-    Task getTask(String taskPath);
-    
-    /**
-     * Proceed backwards through the nodes until we come across the first Task
-     * in the tree. This is the root Task.
-     */
-    Task getRootTask();
-    
-    /**
-     * The "fully-qualified" name of a Task is the Task's name, prepended by its
-     * parent's name, prepended by its parent's name, etc. This method may be
-     * used by the Task's hashCode() method to calculate a hash that will
-     * uniquely identify a Task.
-     */
-    String getFullyQualifiedName();
-    
-    /**
-     * Determines whether this Task is executed whenever its parent is executed,
-     * or if its execution must be specifically requested.
-     * <p></p>
-     * <dl><dt>EXECUTION_MODE_EXPLICIT</dt>
-     * <dd>Requires interaction by the TaskEngine in order to execute.</dd>
-     * <dt>EXECUTION_MODE_IMPLICIT</dt>
-     * <dd>This Task is automatically executed when its parent is
-     * executed.</dd>
-     * <dt>EXECUTION_MODE_PRIORITY</dt>
-     * <dd>These Tasks are executed prior to its parent's execution</dd></dl>
-     * <p></p>
-     * The default mode should probably be EXECUTION_MODE_IMPLICIT. In the
-     * build domain of Ant, every Task below a Task will normally be executed.
-     * The major exception to this is the Target. When a Project Task is
-     * executed, all Target Tasks do <i>not</i> automatically fire, however all
-     * Property Tasks <i>do</i> execute.
-     */
-    int getExecutionMode();
-    
-    /**
-     * Determines whether a Task is suitable for holding property values.
-     */
-    boolean isPropertyContainer();
-    
-    /**
-     * Each Task will hold its attributes in some manner. This method will allow
-     * the Task implementation to return the value of its attribute.
-     */
-    String getAttributeValue(String name);
-    
-    /**
-     * Returns this Task's parent Task. If this Task is the root Task, then this
-     * method will return null.
-     */
-    Task getParent();
-    
-    /**
-     * Sets the Task's parent.
-     */
-    void setParent(Task parent);
-    
-    /**
-     * Returns the an array of Task objects that are subordinate to this Task.
-     */
-    Task[] getChildren();
-}
diff --git a/proposal/frantic/src/org/apache/ant/tasks/build/Project.java b/proposal/frantic/src/org/apache/ant/tasks/build/Project.java
deleted file mode 100644
index bb28904..0000000
--- a/proposal/frantic/src/org/apache/ant/tasks/build/Project.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999, 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", "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.tasks.build;
-
-
-import org.apache.ant.AntException;
-import org.apache.ant.engine.TaskEngine;
-import org.apache.ant.tasks.BaseTask;
-import org.apache.ant.tasks.Task;
-
-public class Project extends BaseTask {
-    
-    private String def;
-    private String basedir;
-    
-    public Project() {
-        super();
-    }
-    
-    public String getDefault() {
-        return def;
-    }
-    
-    public void setDefault(String newDefault) {
-        def = newDefault;
-    }
-    
-    public void setBasedir(String newBasedir) {
-        basedir = newBasedir;
-    }
-    
-    public String getBasedir() {
-        return basedir;
-    }
-    
-    ////////////////////////////////////////////////////////////////////////////
-    //                        BaseTask Implementation                         //
-    ////////////////////////////////////////////////////////////////////////////
-    
-    public void init(TaskEngine engine) throws AntException {
-    }
-    
-    /**
-     * Here is where we check and see if there are any Targets specified. We do
-     * this by peeking into the known taskStack and checking to see if a Target
-     * is next to be executed. If not, we add our default Target to the list.
-     */
-    public void execute(TaskEngine engine) throws AntException {
-        // see if it is necessary to invoke the default task
-        Task task = engine.getNextExecuteTask();
-        if (task == null && getDefault() != null) {
-            Task defaultTask = getTask(getDefault());
-            if (defaultTask != null) {
-                engine.execute(defaultTask);
-            }
-        }
-    }
-    
-    public boolean isPropertyContainer() {
-        return true;
-    }
-}
diff --git a/proposal/frantic/src/org/apache/ant/tasks/build/Target.java b/proposal/frantic/src/org/apache/ant/tasks/build/Target.java
deleted file mode 100644
index c9e3dc6..0000000
--- a/proposal/frantic/src/org/apache/ant/tasks/build/Target.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999, 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", "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.tasks.build;
-
-
-
-import org.apache.ant.AntException;
-import org.apache.ant.engine.TaskEngine;
-import org.apache.ant.tasks.BaseTask;
-import org.apache.ant.tasks.Task;
-
-public class Target extends BaseTask {
-    
-    private String depends;
-    private String ifCond;
-    private String unlessCond;
-    
-    public Target() {
-        super();
-    }
-    
-    public String getIf() {
-        return ifCond;
-    }
-    
-    public void setIf(String condition) {
-        this.ifCond = condition;
-    }
-    
-    public String getUnless() {
-        return unlessCond;
-    }
-    
-    public void setUnless(String condition) {
-        this.unlessCond = condition;
-    }
-    
-    public void setDepends(String newDepends) {
-        this.depends = newDepends;
-    }
-    
-    public String getDepends() {
-        return depends;
-    }
-    
-    ////////////////////////////////////////////////////////////////////////////
-    //                        BaseTask Implementation                         //
-    ////////////////////////////////////////////////////////////////////////////
-    
-    public int getExecutionMode() {
-        return Task.EXECUTION_MODE_EXPLICIT;
-    }
-    
-    /**
-     * Note that dependencies are executed before the task at hand.
-     */
-    public void execute(TaskEngine engine) throws AntException {
-        if (getDepends() != null && getDepends().length() > 0) {
-            Task dependencyTask = getTask(getDepends());
-            if (dependencyTask == null) {
-                throw new AntException(
-                                       "Cannot find dependency, " + getDepends() + " from Task.");
-            }
-            
-            engine.execute(dependencyTask);
-        }
-    }
-    
-    public boolean isPropertyContainer() {
-        return true;
-    }
-}
diff --git a/proposal/frantic/src/org/apache/ant/tasks/util/Property.java b/proposal/frantic/src/org/apache/ant/tasks/util/Property.java
deleted file mode 100644
index 559c837..0000000
--- a/proposal/frantic/src/org/apache/ant/tasks/util/Property.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999, 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", "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.tasks.util;
-
-
-
-import org.apache.ant.AntException;
-import org.apache.ant.engine.TaskEngine;
-import org.apache.ant.tasks.BaseTask;
-
-public class Property extends BaseTask {
-    
-    private String value;
-    private String name;
-    
-    public Property() {
-        super();
-    }
-    
-    public String getValue() {
-        return value;
-    }
-    
-    public void setValue(String value) {
-        this.value = value;
-    }
-    
-    public void setName(String name) {
-        this.name = name;
-    }
-    
-    public String getName() {
-        return name;
-    }
-    
-    ////////////////////////////////////////////////////////////////////////////
-    //                        BaseTask Implementation                         //
-    ////////////////////////////////////////////////////////////////////////////
-    
-    public void execute(TaskEngine engine) throws AntException {
-        if (getParent() == null) {
-            throw new AntException("A Property Task must have a parent Task.");
-        }
-        engine.setPropertyValue(getName(), getValue());
-    }
-}
diff --git a/proposal/frantic/src/org/apache/ant/tasks/util/PropertyDump.java b/proposal/frantic/src/org/apache/ant/tasks/util/PropertyDump.java
deleted file mode 100644
index 66c3dd7..0000000
--- a/proposal/frantic/src/org/apache/ant/tasks/util/PropertyDump.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999, 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", "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.tasks.util;
-
-
-
-import java.util.*;
-import org.apache.ant.AntException;
-import org.apache.ant.engine.TaskEngine;
-import org.apache.ant.tasks.BaseTask;
-
-public class PropertyDump extends BaseTask {
-    
-    public PropertyDump() {
-        super();
-    }
-    
-    ////////////////////////////////////////////////////////////////////////////
-    //                        BaseTask Implementation                         //
-    ////////////////////////////////////////////////////////////////////////////
-    
-    public void execute(TaskEngine engine) throws AntException {
-        List propNames = engine.getPropertyNames();
-        for (Iterator i = propNames.iterator(); i.hasNext();) {
-            String name = (String)i.next();
-            String value = engine.getPropertyValue(name).toString();
-            engine.message(this, name + " = " + value);
-        }
-    }
-}
diff --git a/proposal/frantic/src/org/apache/ant/test/SimpleTest.java b/proposal/frantic/src/org/apache/ant/test/SimpleTest.java
deleted file mode 100644
index 3abe5c4..0000000
--- a/proposal/frantic/src/org/apache/ant/test/SimpleTest.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999, 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", "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.test;
-
-
-
-
-import org.apache.ant.AntException;
-import org.apache.ant.engine.DefaultEngineListener;
-import org.apache.ant.engine.TaskEngine;
-import org.apache.ant.engine.TaskEngineImpl;
-import org.apache.ant.tasks.Task;
-import org.apache.ant.tasks.build.Project;
-import org.apache.ant.tasks.build.Target;
-import org.apache.ant.tasks.util.Property;
-import org.apache.ant.tasks.util.PropertyDump;
-
-public class SimpleTest {
-    
-    Task target;
-    
-    public SimpleTest() {
-        try {
-            Task rootTask = buildProject();
-            TaskEngine engine = TaskEngineImpl.getTaskEngine();
-            engine.addAntEngineListener(new DefaultEngineListener());
-            engine.execute(rootTask, target);
-        } catch (AntException ax) {
-            ax.printStackTrace(System.err);
-        }
-    }
-    
-    protected Task buildProject() {
-        Project project = new Project();
-        project.setTaskName("project");
-        project.setBasedir("somedir");
-        project.setDefault("build");
-        
-        Property property1 = new Property();
-        property1.setTaskName("prop1");
-        property1.setName("basedir");
-        property1.setValue("/org/apache");
-        project.addChild(property1);
-        
-        Property property2 = new Property();
-        property2.setTaskName("prop2");
-        property2.setName("dir1");
-        property2.setValue("${basedir}/ant");
-        project.addChild(property2);
-        
-        Target target1 = new Target();
-        target1.setTaskName("clean");
-        project.addChild(target1);
-        
-        PropertyDump pd = new PropertyDump();
-        pd.setTaskName("dump");
-        target1.addChild(pd);
-        
-        Target target2 = new Target();
-        target2.setTaskName("prepare");
-        target2.setDepends("../clean");
-        project.addChild(target2);
-        
-        Property property3 = new Property();
-        property3.setTaskName("prop3");
-        property3.setName("dir2");
-        property3.setValue("${dir1}/tasks");
-        target2.addChild(property3);
-        
-        Target target3 = new Target();
-        target3.setTaskName("build");
-        target3.setDepends("../prepare");
-        project.addChild(target3);
-        
-        Property property4 = new Property();
-        property4.setTaskName("prop4");
-        property4.setName("dir3");
-        property4.setValue("r2}");
-        target3.addChild(property4);
-        
-        Property property5 = new Property();
-        property5.setTaskName("prop5");
-        property5.setName("dir4");
-        property5.setValue("${di${dir3}");
-        target3.addChild(property5);
-        
-        target = target2;
-        
-        return project;
-    }
-    
-    public static void main(String[] args) {
-        SimpleTest simpleTest1 = new SimpleTest();
-    }
-}
diff --git a/proposal/frantic/website/Task.html b/proposal/frantic/website/Task.html
deleted file mode 100644
index 73c808f..0000000
--- a/proposal/frantic/website/Task.html
+++ /dev/null
@@ -1,471 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sat Dec 16 22:19:46 EST 2000 -->
-<TITLE>
-: Interface  Task
-</TITLE>
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-</HEAD>
-<BODY BGCOLOR="white">
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_top"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Task.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-org.apache.ant.tasks</FONT>
-<BR>
-Interface  Task</H2>
-<HR>
-<DL>
-<DT>public interface <B>Task</B></DL>
-
-<P>
-Task is the core interface for all structures that will be processed by the
- TaskEngine.
-<P>
-<HR>
-
-<P>
-<!-- ======== INNER CLASS SUMMARY ======== -->
-
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#EXECUTION_MODE_EXPLICIT">EXECUTION_MODE_EXPLICIT</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#EXECUTION_MODE_IMPLICIT">EXECUTION_MODE_IMPLICIT</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#EXECUTION_MODE_PRIORITY">EXECUTION_MODE_PRIORITY</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;char</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#NAME_SEPARATOR">NAME_SEPARATOR</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=2><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#execute(org.apache.ant.engine.TaskEngine)">execute</A></B>(org.apache.ant.engine.TaskEngine&nbsp;engine)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Causes the existing Task implementation to execute.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#getAttributeValue(java.lang.String)">getAttributeValue</A></B>(java.lang.String&nbsp;name)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Each Task will hold its attributes in some manner.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../org/apache/ant/tasks/Task.html">Task</A>[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#getChildren()">getChildren</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the an array of Task objects that are subordinate to this Task.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#getExecutionMode()">getExecutionMode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether this Task is executed whenever its parent is executed,
- or if its execution must be specifically requested.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#getFullyQualifiedName()">getFullyQualifiedName</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The "fully-qualified" name of a Task is the Task's name, prepended by its
- parent's name, prepended by its parent's name, etc.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../org/apache/ant/tasks/Task.html">Task</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#getParent()">getParent</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns this Task's parent Task.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../org/apache/ant/tasks/Task.html">Task</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#getRootTask()">getRootTask</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Proceed backwards through the nodes until we come across the first Task
- in the tree.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../org/apache/ant/tasks/Task.html">Task</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#getTask(java.lang.String)">getTask</A></B>(java.lang.String&nbsp;taskPath)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A mechanism for locating a task relative to the current task.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#getTaskName()">getTaskName</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Just a simple name used to identify a Task.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#init(org.apache.ant.engine.TaskEngine)">init</A></B>(org.apache.ant.engine.TaskEngine&nbsp;engine)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called when the Task first gets "noticed" by the TaskEngine.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#isPropertyContainer()">isPropertyContainer</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a Task is suitable for holding property values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#setParent(org.apache.ant.tasks.Task)">setParent</A></B>(<A HREF="../../../../org/apache/ant/tasks/Task.html">Task</A>&nbsp;parent)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the Task's parent.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../org/apache/ant/tasks/Task.html#validate()">validate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Each Task should have the ability to validate its state.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="EXECUTION_MODE_IMPLICIT"><!-- --></A><H3>
-EXECUTION_MODE_IMPLICIT</H3>
-<PRE>
-public static final int <B>EXECUTION_MODE_IMPLICIT</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<A NAME="EXECUTION_MODE_EXPLICIT"><!-- --></A><H3>
-EXECUTION_MODE_EXPLICIT</H3>
-<PRE>
-public static final int <B>EXECUTION_MODE_EXPLICIT</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<A NAME="EXECUTION_MODE_PRIORITY"><!-- --></A><H3>
-EXECUTION_MODE_PRIORITY</H3>
-<PRE>
-public static final int <B>EXECUTION_MODE_PRIORITY</B></PRE>
-<DL>
-</DL>
-<HR>
-
-<A NAME="NAME_SEPARATOR"><!-- --></A><H3>
-NAME_SEPARATOR</H3>
-<PRE>
-public static final char <B>NAME_SEPARATOR</B></PRE>
-<DL>
-</DL>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TD COLSPAN=1><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TD>
-</TR>
-</TABLE>
-
-<A NAME="execute(org.apache.ant.engine.TaskEngine)"><!-- --></A><H3>
-execute</H3>
-<PRE>
-public void <B>execute</B>(org.apache.ant.engine.TaskEngine&nbsp;engine)
-             throws org.apache.ant.AntException</PRE>
-<DL>
-<DD>Causes the existing Task implementation to execute.</DL>
-<HR>
-
-<A NAME="init(org.apache.ant.engine.TaskEngine)"><!-- --></A><H3>
-init</H3>
-<PRE>
-public void <B>init</B>(org.apache.ant.engine.TaskEngine&nbsp;engine)
-          throws org.apache.ant.AntException</PRE>
-<DL>
-<DD>Called when the Task first gets "noticed" by the TaskEngine.</DL>
-<HR>
-
-<A NAME="validate()"><!-- --></A><H3>
-validate</H3>
-<PRE>
-public void <B>validate</B>()
-              throws org.apache.ant.AntException</PRE>
-<DL>
-<DD>Each Task should have the ability to validate its state. This would be
- invoked by the TaskEngine prior to commencing an execution cycle.</DL>
-<HR>
-
-<A NAME="getTaskName()"><!-- --></A><H3>
-getTaskName</H3>
-<PRE>
-public java.lang.String <B>getTaskName</B>()</PRE>
-<DL>
-<DD>Just a simple name used to identify a Task. This name is only sufficient
- for simple debugging and GUI output. It does not uniquely identify a
- Task.<DD><DL>
-<DT><B>See Also: </B><DD><A HREF="../../../../org/apache/ant/tasks/Task.html#getFullyQualifiedName()"><CODE>getFullyQualifiedName()</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getTask(java.lang.String)"><!-- --></A><H3>
-getTask</H3>
-<PRE>
-public <A HREF="../../../../org/apache/ant/tasks/Task.html">Task</A> <B>getTask</B>(java.lang.String&nbsp;taskPath)</PRE>
-<DL>
-<DD>A mechanism for locating a task relative to the current task. This
- navigation sceme will mimic a typical OS system. '..' will move back
- a level in the Task tree. If taskPath begins with '/' then the root node
- will be used as a starting point.
- <p></p>
- Returns null of no task is found at this location.</DL>
-<HR>
-
-<A NAME="getRootTask()"><!-- --></A><H3>
-getRootTask</H3>
-<PRE>
-public <A HREF="../../../../org/apache/ant/tasks/Task.html">Task</A> <B>getRootTask</B>()</PRE>
-<DL>
-<DD>Proceed backwards through the nodes until we come across the first Task
- in the tree. This is the root Task.</DL>
-<HR>
-
-<A NAME="getFullyQualifiedName()"><!-- --></A><H3>
-getFullyQualifiedName</H3>
-<PRE>
-public java.lang.String <B>getFullyQualifiedName</B>()</PRE>
-<DL>
-<DD>The "fully-qualified" name of a Task is the Task's name, prepended by its
- parent's name, prepended by its parent's name, etc. This method may be
- used by the Task's hashCode() method to calculate a hash that will
- uniquely identify a Task.</DL>
-<HR>
-
-<A NAME="getExecutionMode()"><!-- --></A><H3>
-getExecutionMode</H3>
-<PRE>
-public int <B>getExecutionMode</B>()</PRE>
-<DL>
-<DD>Determines whether this Task is executed whenever its parent is executed,
- or if its execution must be specifically requested.
- <p></p>
- <dl><dt>EXECUTION_MODE_EXPLICIT</dt>
- <dd>Requires interaction by the TaskEngine in order to execute.</dd>
- <dt>EXECUTION_MODE_IMPLICIT</dt>
- <dd>This Task is automatically executed when its parent is
- executed.</dd>
- <dt>EXECUTION_MODE_PRIORITY</dt>
- <dd>These Tasks are executed prior to its parent's execution</dd></dl>
- <p></p>
- The default mode should probably be EXECUTION_MODE_IMPLICIT. In the
- build domain of Ant, every Task below a Task will normally be executed.
- The major exception to this is the Target. When a Project Task is
- executed, all Target Tasks do <i>not</i> automatically fire, however all
- Property Tasks <i>do</i> execute.</DL>
-<HR>
-
-<A NAME="isPropertyContainer()"><!-- --></A><H3>
-isPropertyContainer</H3>
-<PRE>
-public boolean <B>isPropertyContainer</B>()</PRE>
-<DL>
-<DD>Determines whether a Task is suitable for holding property values.</DL>
-<HR>
-
-<A NAME="getAttributeValue(java.lang.String)"><!-- --></A><H3>
-getAttributeValue</H3>
-<PRE>
-public java.lang.String <B>getAttributeValue</B>(java.lang.String&nbsp;name)</PRE>
-<DL>
-<DD>Each Task will hold its attributes in some manner. This method will allow
- the Task implementation to return the value of its attribute.</DL>
-<HR>
-
-<A NAME="getParent()"><!-- --></A><H3>
-getParent</H3>
-<PRE>
-public <A HREF="../../../../org/apache/ant/tasks/Task.html">Task</A> <B>getParent</B>()</PRE>
-<DL>
-<DD>Returns this Task's parent Task. If this Task is the root Task, then this
- method will return null.</DL>
-<HR>
-
-<A NAME="setParent(org.apache.ant.tasks.Task)"><!-- --></A><H3>
-setParent</H3>
-<PRE>
-public void <B>setParent</B>(<A HREF="../../../../org/apache/ant/tasks/Task.html">Task</A>&nbsp;parent)</PRE>
-<DL>
-<DD>Sets the Task's parent.</DL>
-<HR>
-
-<A NAME="getChildren()"><!-- --></A><H3>
-getChildren</H3>
-<PRE>
-public <A HREF="../../../../org/apache/ant/tasks/Task.html">Task</A>[] <B>getChildren</B>()</PRE>
-<DL>
-<DD>Returns the an array of Task objects that are subordinate to this Task.</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-<!-- ========== START OF NAVBAR ========== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Task.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL: &nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<!-- =========== END OF NAVBAR =========== -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/proposal/frantic/website/images/frantic_logo.gif b/proposal/frantic/website/images/frantic_logo.gif
deleted file mode 100644
index fe40da4..0000000
--- a/proposal/frantic/website/images/frantic_logo.gif
+++ /dev/null
Binary files differ
diff --git a/proposal/frantic/website/images/task_hierarchy.gif b/proposal/frantic/website/images/task_hierarchy.gif
deleted file mode 100644
index ff8db94..0000000
--- a/proposal/frantic/website/images/task_hierarchy.gif
+++ /dev/null
Binary files differ
diff --git a/proposal/frantic/website/index.html b/proposal/frantic/website/index.html
deleted file mode 100644
index 1491dfe..0000000
--- a/proposal/frantic/website/index.html
+++ /dev/null
@@ -1,217 +0,0 @@
-<html>
-<head>
-<title>Ant Proposal - Frantic</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<style type="text/css">
-<!--
-.quote {  font-family: "Times New Roman", Times, serif; font-size: 24pt}
-p {  font-family: Verdana, Arial, Helvetica, sans-serif}
-h1 {  font-family: "Times New Roman", Times, serif; color: #330099; font-weight: bold}
-h2 {  font-family: Verdana, Arial, Helvetica, sans-serif; color: #3300CC}
-h3 {  font-family: Arial, Helvetica, sans-serif; font-weight: bold; color: #3300CC}
-a {  text-decoration: none; color: #9900FF}
-a:hover {  text-decoration: underline}
-h5 {  font-family: Verdana, Arial, Helvetica, sans-serif}
--->
-</style>
-</head>
-
-<body bgcolor="#FFFFFF">
-<h1 align="center"><img src="images/frantic_logo.gif" width="250" height="264" align="left">Ant 
-  2.0 Proposal</h1>
-<h2 align="center">Code Name - Frantic</h2>
-<p>Frantic hardly describes the proposal process...more like my coding and design 
-  efforts! I am relatively new to Ant and the mail list, and I have posted several 
-  emails recently regarding the use of DOM in the future of Ant. Once I discovered 
-  the mail archive (thanks Simeon), I had a chance to notice that many of my questions 
-  were asked before. My extemporaneous emails were not without consequence it 
-  seems. After writing one of them it set some wheels in motion for what I hope 
-  is a useful addition to the current (and growing) number of proposals for Ant 
-  2.0.</p>
-<center>
-<table width="50%" border="0" bgcolor="#9933FF" cellpadding="1" cellspacing="0">
-  <tr>
-    <td>
-      <table width="100%" border="0" cellpadding="4">
-          <tr bgcolor="#CCCCFF" align="center"> 
-            <td> 
-              <p>I think the concept behind Ant should be changed to be a "Task 
-                Execution Engine", and the concept of Project and Target can be 
-                generalized into a specific form of a Task.</p>
-            </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-</table>
-</center>
-<p>&nbsp;</p>
-<p>The email list has received some requests from developers to extend Ant to 
-  support different problem domains. Peter Donald has latched onto this issue 
-  and I understand that he has incorporated some of these ideas into his Ant proposal. 
-  I also have seen some very impressive DOM support integrated into Antidote, 
-  an elegant basis for a GUI editor crafted by Simeon Fitch. Sim achieves a great 
-  deal of flexibility by using the W3C DOM as a superclass to his Project/Target/Task 
-  objects. He has, in effect, abstracted each of these &quot;core&quot; Ant objects 
-  until they are simply DOM nodes.</p>
-<p>Peter's and Sim's ideas struck a chord and I thought that Peter's desire to 
-  allow Ant to break free from the Build domain and into Install domains by extending 
-  Ant, could be achieved by looking at the problem from a different point of view. 
-  As I stated in my email, we can achieve a much higher degree of flexibility 
-  in Ant by generalizing more.</p>
-<h3>Design Proposal</h3>
-<p>I believe that Ant 2.0 should be re-termed a <b><i>Task Execution Engine</i></b>, 
-  and the core of Ant becomes the Engine and the Task. This seems a little radical 
-  considering that the Project/Target/Task object model has served us so well 
-  in Ant 1.x, however it is very clear that Project and Target are simple another 
-  type of Task.</p>
-<p>An enormous amount of code has been added to maintain Project and Target as 
-  separate classes with distinct, hard-coded behaviors. From the proof-of-concept 
-  code that I have been developing, I am inspired by how much more elegant the 
-  code becomes when this simplified model is realized. </p>
-
-<p>Having a base Task interface that all Tasks implement will also offer a generalized 
-  approach that benefits GUI's in much the same manner that the DOM has helped 
-  Antidote. Also, by making Task an interface instead of a class, we can finally 
-  free ourselves of implementation specifics.</p>
-<p>As I was writing the concept code, it struck me that I was too worried about 
-  the XML. Simeon Fitch mentioned in an email in early December, the possibility 
-  of storing build scripts in a database. I think this, along with various comments 
-  about DOM dependencies from Peter Donald, Jose Alberto Fernandez, and Stefan 
-  Bodewig made me realize that Core Ant shouldn't care where the build script 
-  lives or in which format it is stored. It is the object model that is primarily 
-  important.</p>
-<h3>The Task</h3>
-<p>The cornerstone of this proposal hinges on the <a href="Task.html" target="new">Task</a> 
-  Interface. It is the only type of external object that the Execution Engine 
-  knows how to handle. It is in this simplicity that the most powerful Ant can 
-  be realized.</p>
-<p>The Task is an object that is aware of it's place in ahierarchy. To this end 
-  it is aware of its parent and its children. Please note that this is a runtime 
-  dependency and a scripting language (or the Task itself) can dynamically change 
-  the relationship of Tasks.</p>
-<table border="0" align="left">
-  <tr> 
-    <td><img src="images/task_hierarchy.gif" width="200" height="140"></td>
-  </tr>
-  <tr align="center"> 
-    <td> 
-      <h5><i>Figure 1</i></h5>
-    </td>
-  </tr>
-</table>
-<p>Key to being able to manipulate Tasks at runtime is some sort of naming conventions. 
-  Currently in the Frantic design is the concept of a Task name. Tasks, being 
-  hierarchical, can be thought of as a directory structure (see figure 1). If 
-  each Task is assigned a name that is unique among its siblings, we can then 
-  have a powerful means of locating and referencing a particular Task anywhere 
-  in the hierarchy. </p>
-<p>For example, the Property Task below the Target named &quot;build&quot; has 
-  a name of &quot;prop3&quot;, however its &quot;fully-qualified&quot; name is 
-  /root/build/prop3. The root of a Task execution list is &quot;/&quot; and the 
-  tag name, in our example /root. In the concept source code I use this principal 
-  of hierarchical naming to support dependencies. Currently, I am treating these 
-  Task names as directories and not as files. This should perhaps change slightly 
-  to the filename approach. In the directory-based approach, a sibling is named 
-  &quot;../sibling&quot;. It would be more convenient to not require the &quot;../&quot;. 
-  In fact, I think I have convinced myself of this.</p>
-<h3> Task Discovery</h3>
-<p>I haven't coded this portion, however I plan on basing it on Duncan's idea 
-  of using the Jar manifests to locate and identify tasks on the classpath. I 
-  was first exposed to this technique in the OpenTools API of Borland's JBuilder 
-  IDE, and I have since used it on a large project for a consulting customer.</p>
-<p>The classpath is scanned at runtime to locate all directories and jar files. 
-  These directories and jar files will have a manifest file that will contain 
-  manifest entries that serve to tie a string token to the Task implementation 
-  class responsible for that token. Directories cannot have manifests per se, 
-  but we will utilize a file, one-level up from the directory, with a name &quot;directory-name.mf&quot;. 
-  This file will be in the format of a manifest file. This will allow developers 
-  to create and test new Tasks without the burden of having to make a Jar archive 
-  every time.</p>
-<h3>Attribute Validation</h3>
-<p>Brett McLaughlin introduced a very interesting techique to perform object validation 
-  using XML Schema in a series of <a href="http://www.javaworld.com/javaworld/jw-09-2000/jw-0908-validation.html">JavaWorld 
-  articles</a>. I can see this technique applied to Tasks as well. The user could 
-  include a schema with a special name in the jar file that accompanies the Tasks. 
-  This schema could be used at runtime to validate a Task's attributes.</p>
-<p>I would imagine that this feature would be outside of what is considered &quot;core&quot; 
-  Ant.</p>
-<h3>The Execution Engine</h3>
-<p>The engine only knows how to process Task objects, and that is what makes it 
-  extremely efficient. It is modeled after how I believe a compiler, or command 
-  interpreter would function. It contains a call stack which I call a <i><b>task 
-  stack</b></i>, and this task stack is under complete control of the engine. 
-  This is not to say that Tasks cannot manipulate the task stack at runtime, because 
-  they do. However, all of this access takes place under the watchful eye of the 
-  execution engine. </p>
-<h3>Properties</h3>
-<p>Keeping track of properties is closely tied to the execution engine, and I 
-  modeled it in a manner consistent with how I believe compilers must work. I 
-  use the concept of a hierarchical series of hashtables that support the concept 
-  of scope in property lists.</p>
-<p>I had originally put the concept of a property into a Task and completely implemented 
-  the bugger. It turned out during testing that my logic was flawed. It seemed 
-  to work well at first...a property defined in a Task would be available to all 
-  child Tasks, but unavailable to any ancestors. When a Task requested the latest 
-  data on a property, it would look in its property list. If it wasn't found there, 
-  it would look in its parent's list, and so on. Instant scope.</p>
-<p>However, it became quickly apparent that properties are a &quot;runtime&quot; 
-  consideration. This is something that Jose Alberto Fernandez will not let any 
-  of us forget for long. :-) What I needed was to move this hierarchical chain 
-  of property lists into the engine. For each new Task executed, a new property 
-  list is created and also pushed onto the stack. It seems to work like a champ.</p>
-<p>I also coded up key substitution into the getParameterValue() events. They 
-  seem to work fine, although I haven't worked up enough test cases to be sure.</p>
-<p>One additional cool feature is that parameters need not only hold Strings. 
-  I thought that there would be occasions where properties will hold Tasks as 
-  well. I believe this will turn out to be a prime mechanism for creating reference 
-  id Tasks like the current FileSet objects and referring to them in other Tasks 
-  just as you would any property value.</p>
-<h3>Attributes</h3>
-<p>I haven't spent any time addresing what is currently referred to a Task's attributes 
-  in Ant 1.x. I still need to think about this concept some more, but as I dwell 
-  on what an attribute is, I keep coming back to the properties. Just like a property 
-  functions as a scoped variable, an attribute is the same thing. Albeit, its 
-  scope is limited to the Task that uses it, but so what.</p>
-<h3>Execution Events</h3>
-<p>The execution engine also supports a few key events that can occur during the 
-  execution lifecycle. Currently events exist for execution start/finish, task 
-  start/execute/finish, exceptions, and simple messaging. The messaging event 
-  allows Tasks to communicate in a standard way that will leverage the engine's 
-  event system to allow various front-ends to intelligently and appropriately 
-  process the output.</p>
-<h3>Scripting</h3>
-<p>I have no experience with incorporating a scripting engine into an engine, 
-  but I do know that this proposal should address the primary issues that surround 
-  such an integration. I think that two features which are absolutely essential 
-  are:</p>
-<p> Provide some sort of naming convention such that a particular Task can be 
-  found given an absolute name or a name relative to another Task. This is complete 
-  and working in the concept code.</p>
-<p>Leave all decisions regarding property evaluation and Task's knowledge of these 
-  properties until the last possible moment.</p>
-<h3>Recursive Tasks</h3>
-<p>I realize that Ant 1.x spent some clock cycles dedicated to resolving circular 
-  references in the Task definitions. I didn't spend any time on that intentionally. 
-  I am not so sure that the elimination of circular references is a good idea. 
-  Especially moving forward, with the incorporation of a scripting language, I 
-  can envision Tasks the assembler wants to execute repeatedly, perhaps even recursively. 
-  I think we should treat this the same way that any modern computer language 
-  would &#151; <i>caveat emptor</i>.</p>
-<h3>Summary</h3>
-<p>There is a lot more to do with this proposal and the concept code. It has been 
-  an exciting weekend getting these thoughts down and trying to back them up. 
-  I look forward to collaborating with others on the list if they wish to help 
-  me, even though I am in proposal phase. I certainly don't know much about XML 
-  parsing and I could use some ideas on how to further my starting model. I would 
-  love to show the Ant core model built in a Builder agnostic manner. Basically, 
-  I want XML to be an option, not a requirement.</p>
-<p>I would also be interested in perhaps building an adapter task that will allow 
-  Ant 1.x tasks to be reused unchanged in the Frantic proposal. The concept of 
-  a Task hasn't changed much, so perhaps this is a possibility.</p>
-<p>As always, your feedback is welcome. I expect that I have missed some major 
-  holes and I would like the opportunity to work with others to plug them up!</p>
-<p><a href="mailto:jimcook@visualxs.com">Jim Cook</a><br>
-  <a href="http://www.visualxs.com/">Visual XS</a></p>
-</body>
-</html>
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 26c57f7..0000000
--- a/proposal/mutant/bootstrap.bat
+++ /dev/null
@@ -1,32 +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 -classpath bootstrap\lib\start.jar;bootstrap\lib\init.jar org.apache.ant.start.Main %*
-
-REM Use the full build as the build used by the build script
-xcopy /s dist bootstrap
-
-REM clean up after bootstrap
-java -classpath bootstrap\lib\start.jar:bootstrap\lib\init.jar org.apache.ant.start.Main clean
diff --git a/proposal/mutant/bootstrap.sh b/proposal/mutant/bootstrap.sh
deleted file mode 100755
index 2d0ddfe..0000000
--- a/proposal/mutant/bootstrap.sh
+++ /dev/null
@@ -1,31 +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 -classpath bootstrap/lib/start.jar:bootstrap/lib/init.jar org.apache.ant.start.Main $*
-
-# Use the full build as the build used by the build script
-cp -r dist/lib bootstrap
-
-#clean up after bootstrap
-java -classpath bootstrap/lib/start.jar:bootstrap/lib/init.jar org.apache.ant.start.Main clean
diff --git a/proposal/mutant/build.bat b/proposal/mutant/build.bat
deleted file mode 100755
index 8360aab..0000000
--- a/proposal/mutant/build.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-REM   Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
-REM   reserved.
-
-java -classpath bootstrap\lib\start.jar;bootstrap\lib\init.jar org.apache.ant.start.Main %*
diff --git a/proposal/mutant/build.sh b/proposal/mutant/build.sh
deleted file mode 100755
index 753bef8..0000000
--- a/proposal/mutant/build.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh -x
-
-#   Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
-#   reserved.
-
-java -classpath bootstrap/lib/start.jar:bootstrap/lib/init.jar org.apache.ant.start.Main $@
diff --git a/proposal/mutant/build.xml b/proposal/mutant/build.xml
deleted file mode 100644
index 5cf5a25..0000000
--- a/proposal/mutant/build.xml
+++ /dev/null
@@ -1,212 +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.cli">
-    <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="cli" depends="antcore, start">
-    <mkdir dir="${bin.dir}/cli"/>
-    <mkdir dir="${distlib.dir}/cli"/>
-    <depend destdir="${bin.dir}/cli" srcdir="${java.dir}/cli">
-      <classpath refid="classpath.cli"/>
-    </depend>
-    <javac destdir="${bin.dir}/cli" srcdir="${java.dir}/cli" debug="${debug}">
-      <classpath refid="classpath.cli"/>
-    </javac>
-    <jar basedir="${bin.dir}/cli" jarfile="${distlib.dir}/cli/cli.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">
-    <antcall target="build-lib" inheritall="false">
-      <param name="libset" value="system"/>
-    </antcall>
-    <ant antfile="build/script.xml" inheritAll="false"/> 
-  </target>
-  
-  <target name="build-lib">
-    <mkdir dir="${bin.dir}/antlibs/${libset}"/>
-    <mkdir dir="${distlib.dir}/antlibs"/>
-    <path id="classpath.antlibs">
-      <path refid="classpath.common"/>
-      <pathelement location="${distlib.dir}/common/common.jar"/>
-    </path>
-    <depend destdir="${bin.dir}/antlibs/${libset}" srcdir="${java.dir}/antlibs/${libset}">
-      <classpath refid="classpath.antlibs"/>
-    </depend>
-    <javac destdir="${bin.dir}/antlibs/${libset}" srcdir="${java.dir}/antlibs/${libset}" debug="${debug}">
-      <classpath refid="classpath.antlibs"/>
-    </javac>
-    <jar basedir="${bin.dir}/antlibs/${libset}" jarfile="${distlib.dir}/antlibs/${libset}.tsk">
-      <metainf dir="${java.dir}/antlibs/${libset}" 
-                includes="antlib.xml"/>
-    </jar>
-  </target>
-
-  <target name="main" depends="cli, 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 maxlinelen="80"
-                memberpattern="[a-z].*"
-                parampattern="[a-z].*"
-                staticpattern="[a-z].*"
-                ignoreCastWhitespace="true">
-      <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 maxlinelen="80"
-                memberpattern="[a-z].*"
-                parampattern="[a-z].*"
-                staticpattern="[a-z].*"
-                allowProtected="true"
-                ignoreCastWhitespace="true">
-      <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}/cli:${java.dir}/start"
-             destdir="${javadocs.dir}"
-             author="true" private ="true"
-             version="true"
-             windowtitle="Mutant API"
-             doctitle="Mutant">
-      <group title="Apache Ant Core" packages="org.apache.ant.antcore*" />
-
-    </javadoc>
-  </target>
-</project>
diff --git a/proposal/mutant/build/ant1compat.xml b/proposal/mutant/build/ant1compat.xml
deleted file mode 100644
index 2fefd77..0000000
--- a/proposal/mutant/build/ant1compat.xml
+++ /dev/null
@@ -1,288 +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="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/AntStructure.java"/>
-    <exclude name="org/apache/tools/ant/taskdefs/Recorder.java"/>
-    <exclude name="org/apache/tools/ant/taskdefs/RecorderEntry.java"/>
-    <exclude name="org/apache/tools/ant/taskdefs/optional/jdepend/*.java"/>
-  </patternset>
-  
-  <patternset id="converted">
-    <exclude name="org/apache/tools/ant/taskdefs/Ant.java"/>
-    <exclude name="org/apache/tools/ant/taskdefs/CallTarget.java"/>
-  </patternset>
-
-  <fileset id="ant1src" dir="../../src/main">
-    <include name="**/*.properties"/>
-    <include name="**/*.mf"/>
-    <include name="org/apache/tools/ant/taskdefs/**/*.java"/>
-    <include name="org/apache/tools/ant/types/**/*.java"/>
-    <exclude name="org/apache/tools/ant/types/DataType.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/BuildException.java"/>
-    <include name="org/apache/tools/ant/ExitException.java"/>
-    <include name="org/apache/tools/ant/DirectoryScanner.java"/>
-    <include name="org/apache/tools/ant/PathTokenizer.java"/>
-    <include name="org/apache/tools/ant/FileScanner.java"/>
-    <include name="org/apache/tools/ant/TaskAdapter.java"/>
-    <include name="org/apache/tools/ant/MatchingTask.java"/>
-    <include name="org/apache/tools/ant/Location.java"/>
-    <include name="org/apache/tools/ant/AntClassLoader.java"/>
-    <include name="org/apache/tools/ant/BuildEvent.java"/>
-    <include name="org/apache/tools/ant/BuildListener.java"/>
-    <!-- <patternset refid="deprecated"/> -->
-    <patternset refid="toohard"/>
-    <patternset refid="converted"/>
-  </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}/antlibs/system.tsk"/>
-  </path>
-
-  <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" />
-    <available property="netrexx.present"
-               classname="netrexx.lang.Rexx"
-               classpathref="classpath" />
-    <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"/>
-    <available property="icontract.present"
-               classname="com.reliablesystems.iContract.IContracted"
-               classpathref="classpath"/>
-    <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" />
-    <available property="bcel.present"
-               classname="org.apache.bcel.Constants"
-               classpathref="classpath" />
-    <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="ejbjar.support">
-      <and>
-        <isset property="bcel.present" />
-        <isset property="jdk1.2+" />
-      </and>
-    </condition>
-  </target>
-
-  <target name="ant1compat" depends="check_for_optional_packages">
-    <mkdir dir="${bin.dir}/ant1src"/>
-    <mkdir dir="${bin.dir}/ant1compat"/>
-    <copy todir="${bin.dir}/ant1src">
-      <fileset refid="ant1src"/>
-    </copy>
-    <depend destdir="${bin.dir}/ant1compat" srcdir="${bin.dir}/ant1src;${java.dir}/antlibs/ant1compat">
-      <classpath refid="classpath"/>
-    </depend>
-    <javac destdir="${bin.dir}/ant1compat" 
-           srcdir="${bin.dir}/ant1src:${java.dir}/antlibs/ant1compat"
-           debug="${debug}">
-      <classpath refid="classpath"/>
-      <exclude name="${regexp.package}/JakartaRegexp*.java"
-               unless="jakarta.regexp.present" />
-      <exclude name="${regexp.package}/JakartaOro*.java"
-               unless="jakarta.oro.present" />
-      <exclude name="${regexp.package}/Jdk14Regexp*.java"
-               unless="jdk1.4+" />
-      <exclude name="${ant.package}/AntSecurityManager.java"
-               unless="jdk1.2+" />
-      <exclude name="${ant.package}/util/optional/NoExitSecurityManager.java"
-               unless="jdk1.2+" />
-      <exclude name="${ant.package}/listener/Log4jListener.java"
-               unless="log4j.present" />
-
-      <exclude name="${ant.package}/taskdefs/email/UUMailer.java" unless="sunuue.present" />
-      <exclude name="${ant.package}/taskdefs/email/MimeMailer.java" unless="javamail.complete" />
-
-      <exclude name="${optional.package}/IContract.java" unless="icontract.present" />
-      <exclude name="${optional.package}/Script.java" unless="bsf.present" />
-      <exclude name="${optional.package}/StyleBook.java" unless="stylebook.present" />
-      <exclude name="${optional.package}/NetRexxC.java" unless="netrexx.present" />
-      <exclude name="${optional.package}/TraXLiaison.java"
-               unless="trax.present" />
-      <exclude name="${optional.package}/XslpLiaison.java" unless="xslp.present" />
-      <exclude name="${optional.package}/XalanLiaison.java" unless="xalan.present" />
-      <exclude name="${optional.package}/ejb/Ejbc*.java" unless="ejb.ejbc.present" />
-      <exclude name="${optional.package}/ejb/DDCreator*.java" unless="ejb.DDCreator.present" />
-      <exclude name="${optional.package}/ejb/WLRun.java" unless="ejb.wls.present" />
-      <exclude name="${optional.package}/ejb/WLStop.java" unless="ejb.wls.present" />
-      <exclude name="${optional.package}/ejb/EjbJar.java" unless="ejbjar.support" />
-      <exclude name="${optional.package}/ejb/*DeploymentTool.java" unless="ejbjar.support" />
-      <exclude name="${optional.package}/ejb/IPlanet*.java" unless="ejbjar.support" />
-      <exclude name="${optional.package}/Javah.java" unless="jdk1.2+" />
-      <exclude name="${optional.package}/junit/*" unless="junit.present" />
-      <exclude name="${optional.package}/net/FTP.java" unless="netcomp.present" />
-      <exclude name="${optional.package}/net/TelnetTask.java" unless="netcomp.present" />
-      <exclude name="${optional.package}/scm/AntStarTeam*.java" unless="starteam.present" />
-      <exclude name="${optional.package}/starteam/*.java" unless="starteam.present" />
-      <exclude name="${optional.package}/ANTLR.java" unless="antlr.present" />
-      <exclude name="${optional.package}/ide/VAJ*.java" unless="vaj.present" />
-      <exclude name="${optional.package}/ide/VAJ*Servlet.java"
-               unless="servlet.present" />
-      <exclude name="${optional.package}/perforce/*.java" unless="jakarta.oro.present" />
-      <exclude name="${optional.package}/sound/*.java" unless="jmf.present" />
-      <exclude name="${optional.package}/junit/XMLResultAggregator.java"
-               unless="trax.present" />
-      <exclude name="${optional.package}/junit/AggregateTransformer.java"
-               unless="trax.present" />
-      <exclude name="${optional.package}/junit/XMLResultAggregator.java"
-               unless="xalan2.present" />
-      <exclude name="${optional.package}/junit/AggregateTransformer.java"
-               unless="xalan2.present" />
-      <exclude name="${optional.package}/junit/XalanExecutor.java"
-               unless="xalan2.present" />
-      <exclude name="${optional.package}/junit/Xalan2Executor.java"
-               unless="xalan2.present" />
-      <exclude name="${optional.package}/junit/Xalan1Executor.java"
-               unless="xalan.present" />
-      <exclude name="${optional.package}/jdepend/*" unless="jdepend.present" />
-      <exclude name="${optional.package}/sitraka/**" unless="some.regexp.support"/>
-      <exclude name="${optional.package}/metamata/MAudit*" unless="jakarta.oro.present"/>
-      <exclude name="${optional.package}/metamata/MMetrics*"
-               unless="trax.present"/>
-      <exclude name="${optional.package}/metamata/**" unless="jdk1.2+" />
-      <exclude name="${optional.type.package}/depend/*.java"
-               unless="bcel.present" />
-      <exclude name="${util.package}/depend/*.java"
-               unless="bcel.present" />
-      <exclude name="${optional.type.package}/depend/*.java"
-               unless="jdk1.2+" />
-      <exclude name="${util.package}/depend/*.java"
-               unless="jdk1.2+" />
-    </javac>
-    <copy todir="${bin.dir}/ant1compat">
-      <fileset dir="${bin.dir}/ant1src" excludes="**/*.java"/>
-    </copy>
-    <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"/>
-    <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 8ebc250..0000000
--- a/proposal/mutant/build/bootstrap.xsl
+++ /dev/null
@@ -1,150 +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="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: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 e09d743..0000000
--- a/proposal/mutant/docs/desc.html
+++ /dev/null
@@ -1,694 +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">
-  <meta name="email" value="conor@apache.org">
-        
-      <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 973e5f8..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 5186aec..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibHandler.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.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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 16793a8..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibManager.java
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 patsh fro 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);
-                throw new ExecutionException("Ant Library \"" + libraryId
-                     + "\" is already loaded from "
-                     + currentVersion.getDefinitionURL());
-            }
-        }
-
-        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);
-
-            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 d14176f..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 1a74361..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 3010c08..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- */
-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 fb6ac2c..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 dd7a01d..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 a5a2f97..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 194cffa..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/AntConfig.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.ant.antcore.config;
-import java.io.File;
-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.common.util.ConfigException;
-import org.apache.ant.common.util.PathTokenizer;
-import org.apache.ant.init.InitUtils;
-
-/**
- * An AntConfig is the java class representation of the antconfig.xml files
- * used to configure Ant.
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 20 January 2002
- */
-public class AntConfig {
-    /** The list of additional directories to be searched for Ant libraries */
-    private List libraryLocations = new ArrayList();
-
-    /**
-     * A list of additional paths for each ant library, indexed on the
-     * library id
-     */
-    private Map libPaths = new HashMap();
-
-    /** 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;
-
-    /**
-     * 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 additional locations in which to search for Ant Libraries
-     *
-     * @return an iterator over the library locations
-     */
-    public Iterator getLibraryLocations() {
-        return libraryLocations.iterator();
-    }
-
-    /**
-     * Get the list of additional path components for a given path
-     *
-     * @param libraryId the identifier for the library
-     * @return the list of URLs for the additional paths for the given
-     *      library
-     */
-    public List getLibraryPathList(String libraryId) {
-        List libraryPathList = (List)libPaths.get(libraryId);
-        if (libraryPathList == null) {
-            libraryPathList = new ArrayList();
-            libPaths.put(libraryId, libraryPathList);
-        }
-        return libraryPathList;
-    }
-
-
-    /**
-     * Get the map of library paths. This map contains a collection of List
-     * instances, indexed by the libraryIds. Each list is a set of
-     * additional classpath entries for the given library
-     *
-     * @return the library paths map
-     */
-    public Map getLibraryPathsMap() {
-        return libPaths;
-    }
-
-    /**
-     * Gets the libraryIds of the AntConfig
-     *
-     * @return an interator over the library identifiers for which there is
-     *      additional path information
-     */
-    public Iterator getLibraryIds() {
-        return libPaths.keySet().iterator();
-    }
-
-    /**
-     * 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;
-    }
-
-    /**
-     * Add an additional set of paths for the given library.
-     *
-     * @param libraryId The library id for which the additional class path
-     *      is being specified
-     * @param libraryPath the classpath style string for the library's
-     *      additonal paths
-     * @exception ConfigException if the appropriate URLs cannot be formed.
-     */
-    public void addLibPath(String libraryId, String libraryPath)
-         throws ConfigException {
-        try {
-            List libraryPathList = getLibraryPathList(libraryId);
-            PathTokenizer p = new PathTokenizer(libraryPath);
-            while (p.hasMoreTokens()) {
-                String pathElement = p.nextToken();
-                File pathElementFile = new File(pathElement);
-                URL pathElementURL = InitUtils.getFileURL(pathElementFile);
-                libraryPathList.add(pathElementURL);
-            }
-        } catch (MalformedURLException e) {
-            throw new ConfigException("Unable to process libraryPath '"
-                 + libraryPath + "' for library '" + libraryId + "'", e);
-        }
-    }
-
-    /**
-     * Add an additional URL for the library's classpath
-     *
-     * @param libraryId the library's unique Id
-     * @param libraryURL a string which points to the additonal path
-     * @exception ConfigException if the URL could not be formed
-     */
-    public void addLibURL(String libraryId, String libraryURL)
-         throws ConfigException {
-        try {
-            List libraryPathList = getLibraryPathList(libraryId);
-            libraryPathList.add(new URL(libraryURL));
-        } catch (MalformedURLException e) {
-            throw new ConfigException("Unable to process libraryURL '"
-                 + libraryURL + "' for library '" + libraryId + "'", e);
-        }
-
-    }
-
-    /**
-     * Merge in another ocnfiguration. The configuration being merged in
-     * takes precedence
-     *
-     * @param otherConfig the other AntConfig to be merged.
-     */
-    public void merge(AntConfig otherConfig) {
-        // merge by
-        List currentLibraryLocations = libraryLocations;
-        libraryLocations = new ArrayList();
-        libraryLocations.addAll(otherConfig.libraryLocations);
-        libraryLocations.addAll(currentLibraryLocations);
-
-        Iterator i = otherConfig.libPaths.keySet().iterator();
-        while (i.hasNext()) {
-            String libraryId = (String)i.next();
-            List currentList = getLibraryPathList(libraryId);
-            List combined = new ArrayList();
-            combined.addAll(otherConfig.getLibraryPathList(libraryId));
-            combined.addAll(currentList);
-            libPaths.put(libraryId, combined);
-        }
-
-        remoteLibs = otherConfig.remoteLibs;
-        remoteProjects = otherConfig.remoteProjects;
-        unsetProperties = otherConfig.unsetProperties;
-    }
-
-    /**
-     * Add a new task directory to be searched for additional Ant libraries
-     *
-     * @param libraryLocation the location (can be a file or a URL) where
-     *      the libraries may be loaded from.
-     */
-    public void addAntLibraryLocation(String libraryLocation) {
-        libraryLocations.add(libraryLocation);
-    }
-}
-
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 a029a65..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/AntConfigHandler.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.ant.antcore.config;
-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 config files
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 {
-
-        try {
-            if (qualifiedName.equals("loadlib")) {
-                LoadLibHandler loadlibHandler
-                     = new LoadLibHandler();
-                loadlibHandler.start(getParseContext(), getXMLReader(),
-                    this, getLocator(), attributes, getElementSource(),
-                    qualifiedName);
-                config.addAntLibraryLocation(loadlibHandler.getLibLocation());
-            } else if (qualifiedName.equals("libpath")) {
-                LibPathHandler libPathHandler
-                     = new LibPathHandler();
-                libPathHandler.start(getParseContext(), getXMLReader(),
-                    this, getLocator(), attributes, getElementSource(),
-                    qualifiedName);
-
-                if (libPathHandler.getLibraryPath() != null) {
-                    config.addLibPath(libPathHandler.getLibraryId(),
-                        libPathHandler.getLibraryPath());
-                } else {
-                    config.addLibURL(libPathHandler.getLibraryId(),
-                        libPathHandler.getLibraryURL());
-                }
-
-            } else {
-                super.startElement(uri, localName, qualifiedName, attributes);
-            }
-        } 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/config/LibPathHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/LibPathHandler.java
deleted file mode 100755
index 579dc03..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/LibPathHandler.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.antcore.config;
-
-import org.apache.ant.antcore.xml.ElementHandler;
-import org.xml.sax.SAXParseException;
-
-/**
- * An XML Handler for the libpath element in an Ant config file
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 20 January 2002
- */
-public class LibPathHandler extends ElementHandler {
-    /** The library identifier attribute name */
-    public static final String LIBID_ATTR = "libid";
-    /** The path attribute name */
-    public static final String PATH_ATTR = "path";
-    /** The path attribute name */
-    public static final String URL_ATTR = "url";
-
-    /**
-     * Get the libraryId for which the additional path is being defined
-     *
-     * @return the library's unique id
-     */
-    public String getLibraryId() {
-        return getAttribute(LIBID_ATTR);
-    }
-
-    /**
-     * Get the additional path being defined fro the library
-     *
-     * @return the libraryPath value, may be null
-     */
-    public String getLibraryPath() {
-        return getAttribute(PATH_ATTR);
-    }
-
-    /**
-     * Get the URL (as a string) containing the additional path for the
-     * library.
-     *
-     * @return the libraryURL value
-     */
-    public String getLibraryURL() {
-        return getAttribute(URL_ATTR);
-    }
-
-
-    /**
-     * Process the libpath 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 (getLibraryId() == null
-             || (getLibraryPath() == null && getLibraryURL() == null)
-             || (getLibraryPath() != null && getLibraryURL() != null)) {
-            throw new SAXParseException("The " + LIBID_ATTR
-                 + " attribute and only one of "
-                 + PATH_ATTR + " or " + URL_ATTR
-                 + " attributes must be specified for a libpath element",
-                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(LIBID_ATTR) &&
-            !attributeName.equals(PATH_ATTR) &&
-            !attributeName.equals(URL_ATTR)) {
-            throwInvalidAttribute(attributeName);
-        }
-    }
-}
-
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/LoadLibHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/LoadLibHandler.java
deleted file mode 100644
index 8413109..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/LoadLibHandler.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.ant.antcore.config;
-
-import org.apache.ant.antcore.xml.ElementHandler;
-import org.xml.sax.SAXParseException;
-
-/**
- * An XML handler to handle the loadlib element of an AntConfig file.
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 20 January 2002
- */
-public class LoadLibHandler extends ElementHandler {
-    /** The location attribute name */
-    public static final String LOCATION_ATTR = "location";
-
-    /**
-     * Get the location of the additional search directory
-     *
-     * @return the additional directory to be searched for Ant libraries.
-     */
-    public String getLibLocation() {
-        return getAttribute(LOCATION_ATTR);
-    }
-
-    /**
-     * Process the loadlibs 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 (getLocation() == null) {
-            throw new SAXParseException(LOCATION_ATTR
-                 + " must be specified for a taskdir element", 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(LOCATION_ATTR)) {
-            throwInvalidAttribute(attributeName);
-        }
-    }
-}
-
-
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 3433b24..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/BuildEventSupport.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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;
-
-/**
- * BuildEventSupport is used by classes which which to send build events to
- * the BuildListeners
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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) {
-            fireMessageLogged(this, line, 
-                isError ? MessageLevel.MSG_ERR : MessageLevel.MSG_INFO);
-        } else {
-            if (isError) {
-                task.handleSystemErr(line);
-            } else {
-                task.handleSystemOut(line);
-            }
-        }
-    }
-}
-
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 c9c8c01..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ClassIntrospector.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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;
-
-/**
- * Introspects a class and builds a reflector for setting values on
- * instances of the class
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 19 January 2002
- */
-public class ClassIntrospector {
-    /** The reflector that this introspector populates */
-    private Reflector reflector;
-
-    /**
-     * 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();
-
-        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()) {
-                reflector.addAttributeMethod(m, 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 baa8a0d..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ComponentManager.java
+++ /dev/null
@@ -1,947 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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;
-
-/**
- * The instance of the ComponentServices made available by the core to the
- * ant libraries.
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 Map antLibraries;
-
-    /** 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;
-
-    /** Reflector objects used to configure Tasks from the Task models. */
-    private Map setters = new HashMap();
-
-
-    /**
-     * Constructor
-     *
-     * @param frame the frame containing this context
-     * @param allowRemoteLibs true if remote libraries can be loaded though
-     *      this service.
-     * @param configLibPaths the additional library paths specified in the
-     *      configuration
-     */
-    protected ComponentManager(Frame frame, boolean allowRemoteLibs,
-                               Map configLibPaths) {
-        this.frame = frame;
-        libManager = new AntLibManager(allowRemoteLibs);
-        dynamicLibraries = new HashMap();
-        libPathsMap = new HashMap(configLibPaths);
-    }
-
-    /**
-     * 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
-     * @exception ExecutionException if the library cannot be loaded
-     */
-    public void loadLib(String libLocation, boolean importAll)
-         throws ExecutionException {
-        try {
-            Map librarySpecs = new HashMap();
-            libManager.loadLibs(librarySpecs, libLocation);
-            libManager.configLibraries(frame.getInitConfig(), librarySpecs,
-                antLibraries, libPathsMap);
-
-            if (importAll) {
-                Iterator i = librarySpecs.keySet().iterator();
-                while (i.hasNext()) {
-                    String libraryId = (String)i.next();
-                    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);
-    }
-
-    /**
-     * Set the standard libraries (i.e. those which are independent of the
-     * build files) to be used in this component manager
-     *
-     * @param standardLibs A collection of AntLibrary objects indexed by
-     *      their libraryId
-     * @exception ExecutionException if the components cannot be imported
-     *      form the libraries fro which such importing is automatic.
-     */
-    protected void setStandardLibraries(Map standardLibs)
-         throws ExecutionException {
-
-        antLibraries = new HashMap(standardLibs);
-
-        // go through the libraries and import all standard ant libraries
-        for (Iterator i = antLibraries.keySet().iterator(); i.hasNext(); ) {
-            String libraryId = (String)i.next();
-            if (libraryId.startsWith(Constants.ANT_LIB_PREFIX)) {
-                // standard library - import whole library
-                importLibrary(libraryId);
-            }
-        }
-    }
-
-    /**
-     * 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.getClass().getName() + ": "
-                 + e.getMessage(), 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.getClass().getName() + ": "
-                 + e.getMessage(), 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.getClass().getName() + ": "
-                 + e.getMessage(), 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 a48c499..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Constants.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.ant.antcore.execution;
-
-/**
- * Core constants
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 651dfe1..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 b662c95..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 69fc217..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreExecService.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.io.File;
-import java.net.MalformedURLException;
-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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 8 February 2002
- */
-public class CoreExecService implements ExecService {
-    /** The Frame this service instance is working for */
-    private Frame frame;
-
-    /**
-     * Constructor
-     *
-     * @param frame the frame containing this context
-     */
-    protected CoreExecService(Frame frame) {
-        this.frame = frame;
-    }
-
-    /**
-     * Run a sub-build.
-     *
-     * @param antFile the file containing the XML description of the model
-     * @param targets A list of targets to be run
-     * @param properties the initiali properties to be used in the build
-     * @exception ExecutionException if the subbuild cannot be run
-     */
-    public void runBuild(File antFile, Map properties, List targets)
-         throws ExecutionException {
-        try {
-            // Parse the build file into a project
-            XMLProjectParser parser = new XMLProjectParser();
-            Project project
-                 = parser.parseBuildFile(InitUtils.getFileURL(antFile));
-            runBuild(project, properties, targets);
-        } catch (MalformedURLException e) {
-            throw new ExecutionException(e);
-        } catch (XMLParseException e) {
-            throw new ExecutionException(e);
-        }
-    }
-
-    /**
-     * Run a sub-build.
-     *
-     * @param model the project model to be used for the build
-     * @param targets A list of targets to be run
-     * @param properties the initiali properties to be used in the build
-     * @exception ExecutionException if the subbuild cannot be run
-     */
-    public void runBuild(Project model, Map properties, List targets)
-         throws ExecutionException {
-        Frame newFrame = frame.createFrame(model);
-        newFrame.setInitialProperties(properties);
-        newFrame.runBuild(targets);
-    }
-
-    /**
-     * Run a sub-build using the current frame's project model
-     *
-     * @param targets A list of targets to be run
-     * @param properties the initiali properties to be used in the build
-     * @exception ExecutionException if the subbuild cannot be run
-     */
-    public void callTarget(Map properties, List targets)
-         throws ExecutionException {
-        runBuild(frame.getProject(), properties, targets);
-    }
-
-    /**
-     * 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 (Throwable e) {
-            ExecutionException ee =
-                new ExecutionException(e.getClass().getName() + ": "
-                 + e.getMessage(), e);
-            failureCause = ee;
-            throw ee;
-        } finally {
-            frame.getEventSupport().fireTaskFinished(task, failureCause);
-        }
-    }
-}
-
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 8285fcf..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 = new FileUtils();
-
-    /**
-     * 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/DeferredSetter.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/DeferredSetter.java
deleted file mode 100644
index 11df858..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 0a23f54..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionContext.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.ant.antcore.execution;
-import java.io.File;
-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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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);
-    }
-
-
-    /**
-     * Get the base directory for this execution of this frame
-     *
-     * @return the base directory
-     */
-    public File getBaseDir() {
-        return frame.getBaseDir();
-    }
-
-    /**
-     * 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 9ede1e7..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 0efeb63..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionManager.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import org.apache.ant.antcore.antlib.AntLibManager;
-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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 12 January 2002
- */
-public class ExecutionManager implements DemuxOutputReceiver {
-    /** The AntLibraries built from Ant's Populated Task Libraries. */
-    private Map antLibraries = new HashMap();
-
-    /** 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;
-    }
-
-    /**
-     * Initialise the execution manager
-     *
-     * @exception ExecutionException if the standard ant libraries cannot be
-     *      loaded
-     */
-    public void init() throws ExecutionException {
-        Map librarySpecs = new HashMap(10);
-        try {
-            // start by loading the task libraries
-            URL standardLibsURL
-                 = new URL(initConfig.getLibraryURL(), "antlibs/");
-
-            AntLibManager libManager
-                 = new AntLibManager(config.isRemoteLibAllowed());
-
-            libManager.loadLibs(librarySpecs, standardLibsURL);
-            libManager.configLibraries(initConfig, librarySpecs, antLibraries,
-                config.getLibraryPathsMap());
-
-            librarySpecs.clear();
-            // add any additional libraries.
-            for (Iterator i = config.getLibraryLocations(); i.hasNext(); ) {
-                // try file first
-                String libLocation = (String)i.next();
-                libManager.loadLibs(librarySpecs, libLocation);
-            }
-            libManager.configLibraries(initConfig, librarySpecs, antLibraries,
-                config.getLibraryPathsMap());
-
-        } catch (MalformedURLException e) {
-            throw new ExecutionException("Unable to load Ant libraries", e);
-        }
-    }
-
-    /**
-     * 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 {
-            init();
-            
-            // start by validating the project we have been given.
-            project.validate();
-
-            mainFrame = new Frame(antLibraries, 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 272c943..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Frame.java
+++ /dev/null
@@ -1,782 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-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.MagicProperties;
-import org.apache.ant.common.util.AntException;
-import org.apache.ant.common.util.ConfigException;
-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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 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;
-
-    /**
-     * These are the standard libraries from which taskdefs, typedefs, etc
-     * may be imported.
-     */
-    private Map standardLibs;
-
-    /** 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 standardLibs The libraries of tasks and types available to
-     *      this frame
-     * @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(Map standardLibs, InitConfig initConfig,
-                    AntConfig config) throws ExecutionException {
-        this.standardLibs = standardLibs;
-        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
-     */
-    public 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 = new HashMap();
-
-        for (Iterator i = project.getReferencedProjectNames(); i.hasNext(); ) {
-            String referenceName = (String)i.next();
-            Project referencedProject
-                 = project.getReferencedProject(referenceName);
-            Frame referencedFrame = createFrame(referencedProject);
-            referencedFrames.put(referenceName, referencedFrame);
-        }
-
-        configureServices();
-        componentManager.setStandardLibraries(standardLibs);
-        setMagicProperties();
-    }
-
-    /**
-     * 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) {
-            throw new ExecutionException("There is no project corresponding "
-                 + "to the name \"" + name + "\"");
-        }
-        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);
-        }
-    }
-
-    /**
-     * 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) {
-            throw new ExecutionException("There is no project corresponding "
-                 + "to the name \"" + 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) {
-            throw new ExecutionException("There is no project corresponding "
-                 + "to the name \"" + 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 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(standardLibs, 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 {
-        determineBaseDirs();
-
-        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);
-            }
-        }
-    }
-
-    /**
-     * 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.
-
-        try {
-            // firstly build a list of fully qualified target names to execute.
-            List dependencyOrder = project.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);
-            }
-        } catch (ConfigException e) {
-            throw new ExecutionException(e);
-        }
-    }
-
-    /**
-     * 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 (AntException te) {
-                ExecutionException e
-                     = new ExecutionException(te, te.getLocation());
-                e.setLocation(model.getLocation(), false);
-                throw e;
-            } catch (RuntimeException e) {
-                ExecutionException ee =
-                    new ExecutionException(e.getClass().getName() + ": "
-                     + e.getMessage(), 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.getClass().getName() + ": "
-                 + e.getMessage(), 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 {
-        for (Iterator i = getReferencedFrames(); i.hasNext(); ) {
-            Frame referencedFrame = (Frame)i.next();
-            referencedFrame.initialize();
-        }
-        Iterator taskIterator = project.getTasks();
-        executeTasks(taskIterator);
-    }
-
-    /**
-     * 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);
-    }
-
-    /**
-     * Determine the base directory for each frame in the frame hierarchy
-     *
-     * @exception ExecutionException if the base directories cannot be
-     *      determined
-     */
-    private void determineBaseDirs() 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 = new FileUtils();
-                    baseDir = fileUtils.resolveFile(projectFileParent, base);
-                }
-            } else {
-                baseDir = new File(".");
-            }
-        }
-        setDataValue(MagicProperties.BASEDIR, baseDir.getAbsolutePath(), true);
-
-        for (Iterator i = getReferencedFrames(); i.hasNext(); ) {
-            Frame refFrame = (Frame)i.next();
-            refFrame.determineBaseDirs();
-        }
-    }
-
-    /**
-     * 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,
-            config.isRemoteLibAllowed(), config.getLibraryPathsMap());
-        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);
-    }
-}
-
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 f45ff6a..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 20efbf6..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Reflector.java
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 19 January 2002
- */
-public class Reflector implements Setter {
-
-    /**
-     * AttributeSetter classes are created at introspection time for each
-     * setter method a class provides and for which a conversion from a
-     * String value is available.
-     *
-     * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
-     * @created 19 January 2002
-     */
-    private interface AttributeSetter {
-        /**
-         * Set the attribute value on an object
-         *
-         * @param obj the object on which the set method is to be invoked
-         * @param value 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 value)
-             throws InvocationTargetException, IllegalAccessException,
-            ExecutionException;
-    }
-
-    /**
-     * 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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
-     * @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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
-     * @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());
-    }
-
-    /**
-     * 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 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(final Method m, String propertyName,
-                                         Map converters) {
-        final 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, propertyName, converter, type);
-            return;
-        }
-
-        if (type.equals(String.class)) {
-            attributeSetters.put(propertyName.toLowerCase(),
-                new AttributeSetter() {
-                    public void set(Object parent, String value)
-                         throws InvocationTargetException,
-                        IllegalAccessException {
-                        m.invoke(parent, new String[]{value});
-                    }
-                });
-            return;
-        }
-
-        try {
-            final Constructor c =
-                type.getConstructor(new Class[]{java.lang.String.class});
-            attributeSetters.put(propertyName.toLowerCase(),
-                new AttributeSetter() {
-                    public void set(Object parent, String value)
-                         throws InvocationTargetException,
-                        IllegalAccessException, ExecutionException {
-                        try {
-                            Object newValue
-                                 = c.newInstance(new String[]{value});
-                            m.invoke(parent, new Object[]{newValue});
-                        } catch (InstantiationException ie) {
-                            throw new ExecutionException(ie);
-                        }
-                    }
-                });
-            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, propertyName, converter, type);
-                        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 propertyName the name of the attribute this method supports
-     * @param converter the converter to be used to construct the value
-     *      expected by the method.
-     * @param type the type expected by the method.
-     */
-    private void addConvertingSetter(final Method m, String propertyName,
-                                           final Converter converter,
-                                           final Class type) {
-        attributeSetters.put(propertyName.toLowerCase(),
-            new AttributeSetter() {
-                public void set(Object obj, String value)
-                     throws InvocationTargetException, ExecutionException,
-                    IllegalAccessException {
-                    Object convertedValue = converter.convert(value, type);
-                    m.invoke(obj, new Object[]{convertedValue});
-                }
-            });
-    }
-}
-
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 b914598..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 e6737c7..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 b968640..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.apache.ant.antcore.xml.ElementHandler;
-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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 9 January 2002
- */
-public class BuildElementHandler extends ElementHandler {
-    /** 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);
-
-        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 9c090c2..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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/NoProjectReadException.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/NoProjectReadException.java
deleted file mode 100644
index 770ba83..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 36ea314..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/ProjectHandler.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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.apache.ant.antcore.xml.ElementHandler;
-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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 9 January 2002
- */
-public class ProjectHandler extends ElementHandler {
-    /** 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());
-
-            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(REF_ELEMENT)) {
-            RefHandler refHandler = new RefHandler();
-            refHandler.start(getParseContext(), getXMLReader(), this,
-                getLocator(), attributes, getElementSource(),
-                qualifiedName);
-            try {
-                project.referenceProject(refHandler.getRefName(),
-                    refHandler.getReferencedProject());
-            } catch (ModelException e) {
-                throw new SAXParseException(e.getMessage(), getLocator(), e);
-            }
-        } else 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 if (localName != null) {
-            // everything else is a task
-            BuildElementHandler buildElementHandler = new BuildElementHandler();
-            buildElementHandler.start(getParseContext(), getXMLReader(),
-                this, getLocator(), attributes, getElementSource(),
-                qualifiedName);
-            project.addTask(buildElementHandler.getBuildElement());
-        } else {
-          // ignore namespaced elements
-          throw new SAXParseException("Only the \"ant\" namespace is "
-            + "currently recognized (" + qualifiedName + ")", 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(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/RefHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/RefHandler.java
deleted file mode 100644
index fa0cc61..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/RefHandler.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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 Ref handler handles the reference of one project to another. The
- * project to be references is parsed with a new parser and then added to
- * the current project under the given alias
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 10 January 2002
- */
-public class RefHandler extends ElementHandler {
-    /** The attribute used to name the ref. */
-    public static final String NAME_ATTR = "name";
-
-    /** The attribute name used to locate the project to be referenced. */
-    public static final String SYSTEMID_ATTR = "project";
-
-    /** The project that has been referenced. */
-    private Project referencedProject;
-
-    /**
-     * Get the project referenced.
-     *
-     * @return an referenced Project.
-     */
-    public Project getReferencedProject() {
-        return referencedProject;
-    }
-
-
-    /**
-     * Get the name under which the project is referenced.
-     *
-     * @return the ref name of the project
-     */
-    public String getRefName() {
-        return getAttribute(NAME_ATTR);
-    }
-
-
-    /**
-     * Create an ref handler to reference a project.
-     *
-     * @param elementName the name of the ref element
-     * @exception SAXParseException if the ref element could not be parsed
-     */
-    public void processElement(String elementName)
-         throws SAXParseException {
-        String refName = getAttribute(NAME_ATTR);
-        if (refName == null) {
-            throw new SAXParseException("Attribute " + NAME_ATTR +
-                " is required in a <ref> element", getLocator());
-        }
-
-        String projectSystemId = getAttribute(SYSTEMID_ATTR);
-        if (projectSystemId == null) {
-            throw new SAXParseException("Attribute " + SYSTEMID_ATTR +
-                " is required in a <ref> element", getLocator());
-        }
-
-        // create a new parser to read this project relative to the
-        // project's URI
-        try {
-            URL refURL = new URL(getElementSource(), projectSystemId);
-            ProjectHandler referencedProjectHandler = new ProjectHandler();
-            getParseContext().parse(refURL, "project",
-                referencedProjectHandler);
-
-            referencedProject = referencedProjectHandler.getProject();
-        } catch (XMLParseException e) {
-            throw new SAXParseException("Error parsing referenced project "
-                 + projectSystemId + ": " + e.getMessage(), getLocator(), e);
-        } catch (NoProjectReadException e) {
-            throw new SAXParseException("No project found in the reference: "
-                 + projectSystemId, getLocator(), e);
-        } catch (MalformedURLException e) {
-            throw new SAXParseException("Unable to reference project "
-                 + projectSystemId + ": " + e.getMessage(),
-                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 {
-        if (!attributeName.equals(SYSTEMID_ATTR) &&
-            !attributeName.equals(NAME_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 2728977..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.apache.ant.antcore.xml.ElementHandler;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXParseException;
-
-/**
- * Element handler for the target element
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 9 January 2002
- */
-public class TargetHandler extends ElementHandler {
-    /** 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));
-        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 a3d7c7b..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 6ebfb19..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 eda682e..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 d54e7c6..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 a project 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 5fd0c6e..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 a73242d..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/antlib.xml
+++ /dev/null
@@ -1,163 +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="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="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="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="regularexpression" classname="org.apache.tools.ant.types.RegularExpression"/>
-</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 b7eaaa7..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 3d3167f..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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/Project.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Project.java
deleted file mode 100644
index 90a59a2..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Project.java
+++ /dev/null
@@ -1,1066 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf 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.service.ComponentService;
-import org.apache.ant.common.service.DataService;
-import org.apache.ant.common.service.FileService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.event.MessageLevel;
-import org.apache.ant.common.util.PropertyUtils;
-import org.apache.tools.ant.types.FilterSet;
-import org.apache.tools.ant.types.FilterSetCollection;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * Project facade
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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;
-
-    /** 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;
-
-    /** 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();
-    }
-
-    /**
-     * static query of the java version
-     *
-     * @return a string indicating the Java version
-     */
-    public static String getJavaVersion() {
-        return javaVersion;
-    }
-
-    /**
-     * 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 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 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();
-    }
-
-    /**
-     * 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);
-        }
-    }
-
-    /**
-     * 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 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 context.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;
-    }
-
-    /**
-     * 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);
-        componentService
-             = (ComponentService)context.getCoreService(ComponentService.class);
-
-        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);
-    }
-
-    /**
-     * 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
-     */
-    public Task createTask(String taskType) {
-        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);
-        }
-    }
-}
-
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 759fa53..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/ProjectComponent.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;
-
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * ProjectComponent facade
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 31 January 2002
- */
-public abstract class ProjectComponent {
-    /** The project in which the project component operates */
-    protected Project project;
-    /** The location within the build file of this project component */
-    protected Location location;
-    /** 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;
-    }
-
-    /**
-     * Sets the file location where this task was defined.
-     *
-     * @param location the new location value
-     */
-    public void setLocation(Location location) {
-        this.location = location;
-    }
-
-    /**
-     * Gets the project of the ProjectComponent
-     *
-     * @return the project
-     */
-    public Project getProject() {
-        return project;
-    }
-
-    /**
-     * 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;
-    }
-
-    /**
-     * 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;
-
-        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());
-        }
-    }
-
-    /**
-     * 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 5ecd1a5..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/ProjectHelper.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;
-import java.util.Hashtable;
-import java.util.Vector;
-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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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);
-        }
-    }
-}
-
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 a54249d..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 4659b5e..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Task.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf 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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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;
-
-    /**
-     * 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;
-    }
-
-
-    /**
-     * 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;
-    }
-
-
-    /** 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;
-    }
-}
-
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 fd73dbe..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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/taskdefs/Ant.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/taskdefs/Ant.java
deleted file mode 100644
index 4563483..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/taskdefs/Ant.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-/**
- * Ant facade over system version of Ant
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 31 January 2002
- */
-public class Ant extends org.apache.ant.antlib.system.Ant {
-}
-
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 abb1700..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/taskdefs/CallTarget.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;
-
-import org.apache.ant.antlib.system.AntCall;
-
-/**
- * CallTarget facade over AntCall
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 31 January 2002
- */
-public class CallTarget extends AntCall {
-}
-
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 7c276f7..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 1433626..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 439d2ae..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 7e8f92b..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 11 February 2002
- */
-public class ScriptFactory extends StandardLibFactory {
-    /**
-     * An inner class used to record information about defined scripts.
-     *
-     * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
-     * @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 48e84c5..0000000
--- a/proposal/mutant/src/java/antlibs/system/antlib.xml
+++ /dev/null
@@ -1,17 +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="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 73f9a48..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Ant.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.ant.antlib.system;
-import java.io.File;
-import org.apache.ant.common.service.ExecService;
-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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 4 February 2002
- */
-public class Ant extends AntBase {
-    /** The ant file to be run */
-    private File antFile;
-    /** 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 antFile the file to build
-     */
-    public void setAntFile(File antFile) {
-        this.antFile = antFile;
-    }
-
-    /**
-     * 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 = getAntContext().getBaseDir();
-        }
-        if (antFile == null) {
-            antFile = new File(baseDir, "build.ant");
-            if (!antFile.exists()) {
-                antFile = new File(baseDir, "build.xml");
-            }
-        }
-        setProperty(MagicProperties.BASEDIR, baseDir.getAbsolutePath());
-        
-        ExecService execService
-             = (ExecService)getCoreService(ExecService.class);
-
-        execService.runBuild(antFile, getProperties(), 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 915283a..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/AntBase.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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.HashMap;
-import java.util.List;
-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.util.ExecutionException;
-
-/**
- * Common Base class for the Ant and AntCall tasks
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 4 February 2002
- */
-public abstract class AntBase extends AbstractTask {
-
-    /**
-     * Simple Property value storing class
-     *
-     * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
-     * @created 5 February 2002
-     */
-    public static class Property extends AbstractComponent {
-        /** The property name */
-        private String name;
-
-        /** The property value */
-        private String 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;
-        }
-
-        /**
-         * 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;
-        }
-
-        /**
-         * 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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
-     * @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;
-
-        /**
-         * 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;
-        }
-
-        /**
-         * 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;
-        }
-
-        /**
-         * 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 name of the target to be evaluated in the sub-build */
-    private String targetName;
-
-    /**
-     * 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 properties which will be passed to the sub-build */
-    private Map properties = new HashMap();
-
-    /** The core's data service for manipulating the properties */
-    private DataService dataService;
-
-    /**
-     * 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;
-    }
-
-    /**
-     * 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;
-    }
-
-    /**
-     * 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);
-    }
-
-    /**
-     * 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);
-    }
-
-    /**
-     * 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);
-    }
-
-    /**
-     * 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;
-    }
-
-    /**
-     * 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 properties;
-        }
-
-        // need to combine existing properties with new ones
-        Map subBuildProperties = dataService.getAllProperties();
-        subBuildProperties.putAll(properties);
-        return subBuildProperties;
-    }
-
-}
-
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 b357d22..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/AntCall.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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.service.ExecService;
-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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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, 
-            getAntContext().getBaseDir().getAbsolutePath());
-        ExecService execService
-             = (ExecService)getCoreService(ExecService.class);
-
-        execService.callTarget(getProperties(), 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 107662f..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/FileConverter.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.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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 86946da..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 23c6f82..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/LibPath.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.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;
-
-/**
- * Task to add an additional classpath to the given library
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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);
-        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 c8fd7c9..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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);
-    }
-
-    /**
-     * 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 e2d4c0a..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 <a href="mailto:conor@apache.org">Conor MacNeill </a>
- * @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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
-     * @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 4009e43..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- */
-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/Sequential.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Sequential.java
deleted file mode 100644
index e99fc22..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/Taskdef.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Taskdef.java
deleted file mode 100644
index a736dd1..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 4577e6f..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 e48f67d..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/URLConverter.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.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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- */
-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 cb72f4e..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 fcc8a48..0000000
--- a/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Ant1CompatBuilder.java
+++ /dev/null
@@ -1,39 +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("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}/antlibs/system.tsk");
-    }
-    protected void check_for_optional_packages(BuildHelper helper) {
-    }
-    protected void ant1compat(BuildHelper helper) {
-        helper.mkdir("${bin.dir}/ant1src");
-        helper.mkdir("${bin.dir}/ant1compat");
-        helper.copyFilesetRef("ant1src", "${bin.dir}/ant1src");
-        helper.javac("${bin.dir}/ant1src:${java.dir}/antlibs/ant1compat", "${bin.dir}/ant1compat", "classpath");
-        helper.copyFileset("${bin.dir}/ant1src", "${bin.dir}/ant1compat");
-        helper.jar("${bin.dir}/ant1compat", "${distlib.dir}/antlibs/ant1compat.jar",
-                   "${java.dir}/antlibs/ant1compat", "antlib.xml");
-    }
-    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 161505f..0000000
--- a/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/BuildHelper.java
+++ /dev/null
@@ -1,504 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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.JarOutputStream;
-import java.util.zip.ZipEntry;
-
-/**
- * A helper class which allows the build files which have been converted to
- * code to be built.
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 16 February 2002
- */
-public class BuildHelper {
-
-    /**
-     * Simple data class for storing info about a fileset.
-     *
-     * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
-     * @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
-     */
-    protected void jar(String basedir, String jarFile, String metaInfDir,
-                       String metaInfIncludes) {
-        try {
-            File base = new File(resolve(basedir));
-            File jar = new File(resolve(jarFile));
-            JarOutputStream jos
-                 = new JarOutputStream(new FileOutputStream(jar));
-            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 178440b..0000000
--- a/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Builder.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 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);
-    }
-
-    /**
-     * 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();
-        files.add(new File(PACKAGE_ROOT, "types/EnumeratedAttribute.java"));
-        files.add(new File(PACKAGE_ROOT, "types/Path.java"));
-        files.add(new File(PACKAGE_ROOT, "types/FileSet.java"));
-        files.add(new File(PACKAGE_ROOT, "types/PatternSet.java"));
-        files.add(new File(PACKAGE_ROOT, "types/Reference.java"));
-        files.add(new File(PACKAGE_ROOT, "types/FilterSet.java"));
-        files.add(new File(PACKAGE_ROOT, "types/FilterSetCollection.java"));
-        files.add(new File(PACKAGE_ROOT, "types/Mapper.java"));
-        files.add(new File(PACKAGE_ROOT, "types/ZipFileSet.java"));
-        files.add(new File(PACKAGE_ROOT, "types/ZipScanner.java"));
-        files.add(new File(PACKAGE_ROOT, "util/FileNameMapper.java"));
-        files.add(new File(PACKAGE_ROOT, "util/FlatFileNameMapper.java"));
-        files.add(new File(PACKAGE_ROOT, "util/SourceFileScanner.java"));
-        files.add(new File(PACKAGE_ROOT, "util/IdentityMapper.java"));
-        files.add(new File(PACKAGE_ROOT, "util/MergingMapper.java"));
-        files.add(new File(PACKAGE_ROOT, "util/GlobPatternMapper.java"));
-        files.add(new File(PACKAGE_ROOT, "types/Commandline.java"));
-        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, "util/FileUtils.java"));
-        files.add(new File(PACKAGE_ROOT, "defaultManifest.mf"));
-        files.add(new File(TASKDEFS_ROOT, "defaults.properties"));
-        files.add(new File(PACKAGE_ROOT, "types/defaults.properties"));
-        files.add(new File(TASKDEFS_ROOT, "Property.java"));
-        files.add(new File(TASKDEFS_ROOT, "Execute.java"));
-        files.add(new File(TASKDEFS_ROOT, "ExecuteStreamHandler.java"));
-        files.add(new File(TASKDEFS_ROOT, "ExecuteWatchdog.java"));
-        files.add(new File(TASKDEFS_ROOT, "ProcessDestroyer.java"));
-        files.add(new File(TASKDEFS_ROOT, "PumpStreamHandler.java"));
-        files.add(new File(TASKDEFS_ROOT, "StreamPumper.java"));
-        files.add(new File(TASKDEFS_ROOT, "LogStreamHandler.java"));
-        files.add(new File(TASKDEFS_ROOT, "LogOutputStream.java"));
-        files.add(new File(TASKDEFS_ROOT, "condition/Os.java"));
-        files.add(new File(TASKDEFS_ROOT, "condition/Contains.java"));
-        files.add(new File(TASKDEFS_ROOT, "condition/Condition.java"));
-        files.add(new File(TASKDEFS_ROOT, "Available.java"));
-        files.add(new File(TASKDEFS_ROOT, "Mkdir.java"));
-        files.add(new File(TASKDEFS_ROOT, "Copy.java"));
-        files.add(new File(TASKDEFS_ROOT, "Echo.java"));
-        files.add(new File(TASKDEFS_ROOT, "MatchingTask.java"));
-        files.add(new File(DEPEND_ROOT, "Depend.java"));
-        files.add(new File(DEPEND_ROOT, "ClassFile.java"));
-        files.add(new File(DEPEND_ROOT, "ClassFileUtils.java"));
-        files.add(new File(DEPEND_ROOT, "constantpool/ClassCPInfo.java"));
-        files.add(new File(DEPEND_ROOT, "constantpool/ConstantPool.java"));
-        files.add(new File(DEPEND_ROOT, "constantpool/ConstantPoolEntry.java"));
-        files.add(new File(DEPEND_ROOT, "constantpool/Utf8CPInfo.java"));
-        files.add(new File(DEPEND_ROOT, "constantpool/ConstantCPInfo.java"));
-        files.add(new File(DEPEND_ROOT, "constantpool/MethodRefCPInfo.java"));
-        files.add(new File(DEPEND_ROOT,
-            "constantpool/InterfaceMethodRefCPInfo.java"));
-        files.add(new File(DEPEND_ROOT, "constantpool/FieldRefCPInfo.java"));
-        files.add(new File(DEPEND_ROOT, "constantpool/NameAndTypeCPInfo.java"));
-        files.add(new File(DEPEND_ROOT, "constantpool/IntegerCPInfo.java"));
-        files.add(new File(DEPEND_ROOT, "constantpool/FloatCPInfo.java"));
-        files.add(new File(DEPEND_ROOT, "constantpool/LongCPInfo.java"));
-        files.add(new File(DEPEND_ROOT, "constantpool/StringCPInfo.java"));
-        files.add(new File(DEPEND_ROOT, "constantpool/DoubleCPInfo.java"));
-        files.add(new File(TASKDEFS_ROOT, "Javac.java"));
-        files.add(new File(TASKDEFS_ROOT, "compilers/CompilerAdapter.java"));
-        files.add(new File(TASKDEFS_ROOT,
-            "compilers/DefaultCompilerAdapter.java"));
-        files.add(new File(TASKDEFS_ROOT,
-            "compilers/CompilerAdapterFactory.java"));
-        files.add(new File(TASKDEFS_ROOT, "compilers/Jikes.java"));
-        files.add(new File(TASKDEFS_ROOT, "compilers/JavacExternal.java"));
-        files.add(new File(TASKDEFS_ROOT, "compilers/Javac12.java"));
-        files.add(new File(TASKDEFS_ROOT, "compilers/Javac13.java"));
-        files.add(new File(TASKDEFS_ROOT, "compilers/Kjc.java"));
-        files.add(new File(TASKDEFS_ROOT, "compilers/Gcj.java"));
-        files.add(new File(TASKDEFS_ROOT, "compilers/Jvc.java"));
-        files.add(new File(TASKDEFS_ROOT, "compilers/Sj.java"));
-        files.add(new File(TASKDEFS_ROOT, "Jar.java"));
-        files.add(new File(TASKDEFS_ROOT, "Zip.java"));
-        files.add(new File(TASKDEFS_ROOT, "Manifest.java"));
-        files.add(new File(TASKDEFS_ROOT, "ManifestException.java"));
-        files.add(new File(ZIP_ROOT, "ZipOutputStream.java"));
-        files.add(new File(ZIP_ROOT, "ZipOutputStream.java"));
-        files.add(new File(ZIP_ROOT, "ZipEntry.java"));
-        files.add(new File(ZIP_ROOT, "ZipLong.java"));
-        files.add(new File(ZIP_ROOT, "ZipShort.java"));
-        files.add(new File(ZIP_ROOT, "ZipExtraField.java"));
-        files.add(new File(ZIP_ROOT, "ExtraFieldUtils.java"));
-        files.add(new File(ZIP_ROOT, "AsiExtraField.java"));
-        files.add(new File(ZIP_ROOT, "UnrecognizedExtraField.java"));
-        files.add(new File(ZIP_ROOT, "UnixStat.java"));
-        files.add(new File(TASKDEFS_ROOT, "ConditionTask.java"));
-        files.add(new File(TASKDEFS_ROOT, "condition/ConditionBase.java"));
-        files.add(new File(TASKDEFS_ROOT, "Checksum.java"));
-        files.add(new File(TASKDEFS_ROOT, "UpToDate.java"));
-        files.add(new File(TASKDEFS_ROOT, "condition/Not.java"));
-        files.add(new File(TASKDEFS_ROOT, "condition/And.java"));
-        files.add(new File(TASKDEFS_ROOT, "condition/Equals.java"));
-        files.add(new File(TASKDEFS_ROOT, "condition/Or.java"));
-        files.add(new File(TASKDEFS_ROOT, "condition/IsSet.java"));
-        files.add(new File(TASKDEFS_ROOT, "condition/Http.java"));
-        files.add(new File(TASKDEFS_ROOT, "condition/Socket.java"));
-        files.add(new File(TASKDEFS_ROOT, "condition/FilesMatch.java"));
-        files.add(new File(TASKDEFS_ROOT, "Taskdef.java"));
-        files.add(new File(TASKDEFS_ROOT, "Definer.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.cli(mainBuild);
-
-        BuildHelper systemBuild = new BuildHelper();
-        systemBuild.setProperty("libset", "system");
-        systemBuild.setProperty("dist.dir", "bootstrap");
-        mutantBuilder._init(systemBuild);
-        mutantBuilder.build_lib(systemBuild);
-
-        Ant1CompatBuilder ant1Builder = new Ant1CompatBuilder();
-        BuildHelper ant1Build = new BuildHelper();
-        ant1Build.setProperty("dist.dir", "bootstrap");
-        ant1Build.addFileSet("ant1src", 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 bf794f3..0000000
--- a/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/MutantBuilder.java
+++ /dev/null
@@ -1,97 +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.cli");
-        helper.addPathElementToPath("classpath.cli", "${distlib.dir}/antcore/antcore.jar");
-        helper.addPathToPath("classpath.cli", "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);
-    }
-    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);
-    }
-    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);
-    }
-    protected void cli(BuildHelper helper) {
-        helper.mkdir("${bin.dir}/cli");
-        helper.mkdir("${distlib.dir}/cli");
-        helper.javac("${java.dir}/cli", "${bin.dir}/cli", "classpath.cli");
-        helper.jar("${bin.dir}/cli", "${distlib.dir}/cli/cli.jar",
-                   null, null);
-    }
-    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);
-        helper.jar("${bin.dir}/start", "${distlib.dir}/ant.jar",
-                   null, null);
-    }
-    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);
-    }
-    protected void clean(BuildHelper helper) {
-    }
-    protected void antlibs(BuildHelper helper) {
-    }
-    protected void build_lib(BuildHelper helper) {
-        helper.mkdir("${bin.dir}/antlibs/${libset}");
-        helper.mkdir("${distlib.dir}/antlibs");
-        helper.createPath("classpath.antlibs");
-        helper.addPathElementToPath("classpath.antlibs", "${distlib.dir}/common/common.jar");
-        helper.addPathToPath("classpath.antlibs", "classpath.common");
-        helper.javac("${java.dir}/antlibs/${libset}", "${bin.dir}/antlibs/${libset}", "classpath.antlibs");
-        helper.jar("${bin.dir}/antlibs/${libset}", "${distlib.dir}/antlibs/${libset}.tsk",
-                   "${java.dir}/antlibs/${libset}", "antlib.xml");
-    }
-    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/cli/org/apache/ant/cli/BuildLogger.java b/proposal/mutant/src/java/cli/org/apache/ant/cli/BuildLogger.java
deleted file mode 100755
index eeb2dcd..0000000
--- a/proposal/mutant/src/java/cli/org/apache/ant/cli/BuildLogger.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.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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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.
-     */
-    public 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.
-     */
-    public 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.
-     */
-    public void setErrorPrintStream(PrintStream err);
-
-}
-
diff --git a/proposal/mutant/src/java/cli/org/apache/ant/cli/Commandline.java b/proposal/mutant/src/java/cli/org/apache/ant/cli/Commandline.java
deleted file mode 100755
index 60cba0c..0000000
--- a/proposal/mutant/src/java/cli/org/apache/ant/cli/Commandline.java
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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.FileNotFoundException;
-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.config.AntConfigHandler;
-import org.apache.ant.antcore.execution.ExecutionManager;
-import org.apache.ant.antcore.modelparser.XMLProjectParser;
-import org.apache.ant.antcore.xml.ParseContext;
-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;
-
-/**
- * This is the command line front end. It drives the core.
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 9 January 2002
- */
-public class Commandline {
-    /** 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";
-
-    /** 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 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.
-     */
-    private 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.
-     */
-    private 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);
-        }
-    }
-
-    /**
-     * 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 = getAntConfig(initConfig.getUserConfigArea());
-            AntConfig systemConfig
-                 = 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 = 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(DEFAULT_BUILD_FILENAME);
-            if (!defaultBuildFile.exists()) {
-                File ant1BuildFile = new File(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/cli/org/apache/ant/cli/DefaultLogger.java b/proposal/mutant/src/java/cli/org/apache/ant/cli/DefaultLogger.java
deleted file mode 100755
index 7e4164b..0000000
--- a/proposal/mutant/src/java/cli/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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 != null) {
-                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/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 8ce2a81..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 b7a461b..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- */
-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 050861c..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AbstractTask.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.ant.common.antlib;
-import org.apache.ant.common.event.MessageLevel;
-
-/**
- * Abstract implementation of the Task interface
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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
-     */
-    public void handleSystemOut(String line) {
-        // 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
-     */
-    public void handleSystemErr(String line) {
-        // 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 cd3c119..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AntContext.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.ant.common.antlib;
-import java.io.File;
-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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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;
-
-    /**
-     * Get the basedir for the current execution
-     *
-     * @return the base directory for this execution of Ant
-     */
-    File getBaseDir();
-
-    /**
-     * Gets the location associated witj 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 9546127..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 b697df8..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 5da1bb9..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 8da1147..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 a1dcd82..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 c37a0b7..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 667bbde..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/Task.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.ant.common.antlib;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * The Task interface defines the methods that a Task must implement.
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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
-     */
-    void handleSystemOut(String 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
-     */
-    void handleSystemErr(String line);
-}
-
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 9e296b2..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 9d492f7..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 781ac89..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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/MessageLevel.java b/proposal/mutant/src/java/common/org/apache/ant/common/event/MessageLevel.java
deleted file mode 100644
index 1d0b5fe..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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/model/BuildElement.java b/proposal/mutant/src/java/common/org/apache/ant/common/model/BuildElement.java
deleted file mode 100644
index ee88b7d..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 configuration information for an element of
- * the build. BuildElements may be grouped into a hierarchy to capture any
- * level of element nesting.
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 71a4fdc..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/model/ModelElement.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.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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 11 January 2002
- */
-public abstract class ModelElement {
-    /** The aspects defined for this element. */
-    private Map aspectMaps;
-
-    /** The location of this element */
-    private Location 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 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 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 f676897..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 9f249f7..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/model/Project.java
+++ /dev/null
@@ -1,536 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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 java.util.StringTokenizer;
-import org.apache.ant.common.util.CircularDependencyChecker;
-import org.apache.ant.common.util.CircularDependencyException;
-import org.apache.ant.common.util.ConfigException;
-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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 projects referenced into this project. Each referenced project is
-     * given a name which is used to identify access to that project's
-     * elements.
-     */
-    private Map referencedProjects = new HashMap();
-
-    /** 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 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 names of the referenced projects.
-     *
-     * @return an iterator which returns the name sof the referenced
-     *      projects.
-     */
-    public Iterator getReferencedProjectNames() {
-        return referencedProjects.keySet().iterator();
-    }
-
-
-    /**
-     * Get a referenced project by name
-     *
-     * @param alias the name under which the project was referenced.
-     * @return the project asscociated with the given reference alias or
-     *      null if there is no such project.
-     */
-    public Project getReferencedProject(String alias) {
-        return (Project)referencedProjects.get(alias);
-    }
-
-
-    /**
-     * Get the initialisation tasks for this project
-     *
-     * @return an iterator over the set of tasks for this project.
-     */
-    public Iterator getTasks() {
-        return tasks.iterator();
-    }
-
-    /**
-     * Get a target by its reference name - references may span multiple
-     * references.
-     *
-     * @param fullTargetName The name of the target relative to this project
-     * @return the Target object with the given name
-     * @exception ModelException if the given target does not exist in this
-     *      project
-     */
-    public Target getRefTarget(String fullTargetName) throws ModelException {
-        Project containingProject = getRefProject(fullTargetName);
-        if (containingProject == null) {
-            throw new ModelException("The target name \"" + fullTargetName
-                 + "\" does not exist in this project");
-        }
-
-        if (containingProject == this) {
-            return getTarget(fullTargetName);
-        }
-
-        int index = fullTargetName.lastIndexOf(REF_DELIMITER);
-        String targetName
-             = fullTargetName.substring(index + REF_DELIMITER.length());
-
-        return containingProject.getTarget(targetName);
-    }
-
-    /**
-     * Get the project which directly contains the target specified by its
-     * full name.
-     *
-     * @param fullTargetName the full name of the target for which the
-     *      containing project is required.
-     * @return The RefProject value
-     */
-    public Project getRefProject(String fullTargetName) {
-        int index = fullTargetName.lastIndexOf(REF_DELIMITER);
-        if (index == -1) {
-            return this;
-        }
-
-        Project currentProject = this;
-        String relativeName = fullTargetName.substring(0, index);
-        StringTokenizer tokenizer
-             = new StringTokenizer(relativeName, REF_DELIMITER);
-        while (tokenizer.hasMoreTokens()) {
-            String refName = tokenizer.nextToken();
-            currentProject = currentProject.getReferencedProject(refName);
-            if (currentProject == null) {
-                return null;
-            }
-        }
-
-        return currentProject;
-    }
-
-    /**
-     * 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 ConfigException if the given target could not be found
-     */
-    public List getTargetDependencies(String fullTargetName)
-         throws ConfigException {
-        try {
-            List flattenedList = new ArrayList();
-            flattenDependency(flattenedList, fullTargetName);
-            flattenedList.add(fullTargetName);
-            return flattenedList;
-        } catch (ConfigException e) {
-            throw new ConfigException(fullTargetName
-                 + " does not exist in project");
-        }
-    }
-
-
-    /**
-     * 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);
-    }
-
-
-    /**
-     * Reference a project using the given name.
-     *
-     * @param referenceName the name under which the project will be
-     *      referenced.
-     * @param project the referenced project.
-     * @throws ModelException if an existing project has already been
-     *      referenced with that name.
-     */
-    public void referenceProject(String referenceName, Project project)
-         throws ModelException {
-        if (referencedProjects.containsKey(referenceName)) {
-            throw new ModelException("A project has already been "
-                 + "introduced with name '" + referenceName + "'");
-        }
-        referencedProjects.put(referenceName, project);
-    }
-
-    /**
-     * Validate this project
-     *
-     * @exception ModelException if the project is not valid
-     */
-    public void validate() throws ModelException {
-        validate(null);
-    }
-
-    /**
-     * Determine target dependency order within this porject and verify that
-     * references to targets in other projects are valid
-     *
-     * @param globalName The global name of 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(String globalName, Target target,
-                                      List dependencyOrder, Set visited,
-                                      CircularDependencyChecker checker)
-         throws ModelException {
-        if (visited.contains(target.getName())) {
-            return;
-        }
-
-        try {
-            String targetName = target.getName();
-            String targetGlobalName = targetName;
-            if (globalName != null) {
-                targetGlobalName = globalName + REF_DELIMITER + targetName;
-            }
-            checker.visitNode(targetGlobalName);
-            for (Iterator i = target.getDependencies(); i.hasNext(); ) {
-                String dependency = (String)i.next();
-                boolean localTarget = (dependency.indexOf(REF_DELIMITER) == -1);
-                Target dependencyTarget
-                     = localTarget ? getTarget(dependency)
-                     : getRefTarget(dependency);
-
-                if (dependencyTarget == null) {
-                    StringBuffer sb = new StringBuffer("Target '");
-                    if (globalName != null) {
-                        sb.append(globalName + REF_DELIMITER);
-                    }
-                    sb.append(dependency);
-                    sb.append("' does not exist in this project. ");
-                    throw new ModelException(new String(sb),
-                        target.getLocation());
-                }
-
-                if (localTarget) {
-                    // need to check the targets we depend on
-                    fillinDependencyOrder(globalName, dependencyTarget,
-                        dependencyOrder, visited, checker);
-                }
-            }
-
-            visited.add(targetName);
-            checker.leaveNode(targetGlobalName);
-            dependencyOrder.add(targetName);
-        } catch (CircularDependencyException e) {
-            throw new ModelException(e.getMessage(),
-                target.getLocation());
-        }
-    }
-
-    /**
-     * Validate that this build element is configured correctly
-     *
-     * @param globalName The name of this project in the reference name
-     *      space
-     * @exception ModelException if the element is invalid
-     */
-    protected void validate(String globalName) throws ModelException {
-        Set keys = referencedProjects.keySet();
-        for (Iterator i = keys.iterator(); i.hasNext(); ) {
-            String refName = (String)i.next();
-            Project referencedProject
-                 = (Project)referencedProjects.get(refName);
-            String refGlobalName = refName;
-            if (globalName != null) {
-                refGlobalName = globalName + REF_DELIMITER + refName;
-            }
-            referencedProject.validate(refGlobalName);
-        }
-
-        // we now 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(globalName, target, dependencyOrder,
-                visited, checker);
-        }
-    }
-
-    /**
-     * 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(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 ConfigException if the given target does not exist in the
-     *      project hierarchy
-     */
-    private void flattenDependency(List flattenedList, String fullTargetName)
-         throws ConfigException {
-        if (flattenedList.contains(fullTargetName)) {
-            return;
-        }
-        try {
-            String fullProjectName = getFullProjectName(fullTargetName);
-            Target target = getRefTarget(fullTargetName);
-            if (target == null) {
-                throw new ConfigException("Target " + fullTargetName
-                     + " does not exist");
-            }
-            for (Iterator i = target.getDependencies(); i.hasNext(); ) {
-                String localDependencyName = (String)i.next();
-                String fullDependencyName
-                     = fullProjectName == null ? localDependencyName
-                     : fullProjectName + REF_DELIMITER + localDependencyName;
-                flattenDependency(flattenedList, fullDependencyName);
-                if (!flattenedList.contains(fullDependencyName)) {
-                    flattenedList.add(fullDependencyName);
-                }
-            }
-        } catch (ModelException e) {
-            throw new ConfigException(e);
-        }
-    }
-}
-
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 da24fc3..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  <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 a306eef..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/service/ComponentService.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.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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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
-     * @exception ExecutionException if the library or libraries cannot be
-     *      imported.
-     */
-    void loadLib(String libLocation, boolean importAll)
-         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 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
-     */
-    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 47e7783..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/service/DataService.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.service;
-import java.util.Map;
-
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Service interface for Data value manipulation operations provided by the
- * core.
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 ff26e5c..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 fcdf28e..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/service/ExecService.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.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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 8 February 2002
- */
-public interface ExecService {
-    /**
-     * Run a sub-build.
-     *
-     * @param antFile the file containing the XML description of the model
-     * @param targets A list of targets to be run
-     * @param properties the initiali properties to be used in the build
-     * @exception ExecutionException if the subbuild cannot be run
-     */
-    void runBuild(File antFile, Map properties, List targets)
-         throws ExecutionException;
-
-    /**
-     * Run a sub-build.
-     *
-     * @param model the project model to be used for the build
-     * @param targets A list of targets to be run
-     * @param properties the initiali properties to be used in the build
-     * @exception ExecutionException if the subbuild cannot be run
-     */
-    void runBuild(Project model, Map properties, List targets)
-         throws ExecutionException;
-
-    /**
-     * Run a sub-build using the current frame's project model
-     *
-     * @param targets A list of targets to be run
-     * @param properties the initiali properties to be used in the build
-     * @exception ExecutionException if the subbuild cannot be run
-     */
-    void callTarget(Map properties, 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;
-}
-
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 43f89f6..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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/MagicProperties.java b/proposal/mutant/src/java/common/org/apache/ant/common/service/MagicProperties.java
deleted file mode 100644
index 0090861..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 b3bb95b..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/AntException.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.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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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());
-        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 8262826..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 e6d3a25..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 adc4413..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 4057c4b..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 d3c07e1..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
-     * @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 9a8aec1..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 a326e0b..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/FileUtils.java
+++ /dev/null
@@ -1,242 +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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @created 21 January 2002
- */
-public class 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 6396f26..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/Location.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.common.util;
-
-/**
- * Stores the file name and line number in a file.
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 e3a3b45..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 (conor@ieee.org)
- * @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 6759c69..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 5a8839a..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) 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.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/init/org/apache/ant/init/ClassLocator.java b/proposal/mutant/src/java/init/org/apache/ant/init/ClassLocator.java
deleted file mode 100755
index e4dfc84..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 51d3f97..0000000
--- a/proposal/mutant/src/java/init/org/apache/ant/init/InitConfig.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.init;
-
-import java.net.URL;
-import java.io.File;
-
-/**
- * InitConfig is the initialization configuration created to start Ant. This
- * is passed to the front end when Ant is started.
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 9 January 2002
- */
-public class InitConfig {
-    /** 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;
-
-    /**
-     * 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;
-    }
-}
-
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 d3edc6a..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 2013957..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 bf3f570..0000000
--- a/proposal/mutant/src/java/init/org/apache/ant/init/LoaderUtils.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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()) {
-            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 71de737..0000000
--- a/proposal/mutant/src/java/remote/org/apache/ant/remote/RemoteMain.java
+++ /dev/null
@@ -1,48 +0,0 @@
-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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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 1224524..0000000
--- a/proposal/mutant/src/java/start/org/apache/ant/start/Main.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals 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.File;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import org.apache.ant.init.ClassLocator;
-import org.apache.ant.init.InitUtils;
-import org.apache.ant.init.InitConfig;
-import org.apache.ant.init.InitException;
-import org.apache.ant.init.LoaderUtils;
-
-/**
- * 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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @created 9 January 2002
- */
-public class Main {
-    /** The actual class that implements the command line front end. */
-    public static final String COMMANDLINE_CLASS
-         = "org.apache.ant.cli.Commandline";
-
-
-    /**
-     * Get a URL to the Ant Library directory.
-     *
-     * @return the URL for the Ant library directory
-     * @throws InitException if there is a problem constructing the library
-     *      URL
-     */
-    public static URL getLibraryURL()
-         throws InitException {
-        try {
-            URL cliURL = ClassLocator.getClassLocationURL(Main.class);
-
-            if (cliURL.getProtocol().equals("file")
-                 && cliURL.getFile().endsWith("/")) {
-                // we are running from a set of classes. This should only
-                // happen in an Ant build situation. We use some embedded
-                // knowledge to locate the lib directory
-                File classesDirectory = new File(cliURL.getFile());
-                File libDirectory = new File(classesDirectory.getParent(),
-                    "lib");
-                if (!libDirectory.exists()) {
-                    throw new RuntimeException("Ant library directory "
-                         + libDirectory + " does not exist");
-                }
-                return InitUtils.getFileURL(libDirectory);
-            } else {
-                String cliURLString = cliURL.toString();
-                int index = cliURLString.lastIndexOf("/");
-                if (index != -1) {
-                    cliURLString = cliURLString.substring(0, index + 1);
-                }
-                return new URL(cliURLString);
-            }
-        } catch (MalformedURLException e) {
-            throw new InitException(e);
-        }
-    }
-
-
-    /**
-     * Entry point for starting command line Ant
-     *
-     * @param args commandline arguments
-     */
-    public static void main(String[] args) {
-        Main main = new Main();
-        main.start(args);
-    }
-
-
-
-    /**
-     * Get the location of AntHome
-     *
-     * @return the URL containing AntHome.
-     * @throws InitException if Ant's home cannot be determined or properly
-     *      contructed.
-     */
-    private URL getAntHome()
-         throws InitException {
-        try {
-            URL libraryURL = getLibraryURL();
-            if (libraryURL != null) {
-                return new URL(libraryURL, "..");
-            }
-        } catch (MalformedURLException e) {
-            throw new InitException(e);
-        }
-        throw new InitException("Unable to determine Ant Home");
-    }
-
-
-    /**
-     * Internal start method used to initialise front end
-     *
-     * @param args commandline arguments
-     */
-    private void start(String[] args) {
-        try {
-            InitConfig config = new InitConfig();
-
-            URL libraryURL = getLibraryURL();
-            config.setLibraryURL(libraryURL);
-
-            URL antHome = getAntHome();
-            config.setAntHome(antHome);
-            if (antHome.getProtocol().equals("file")) {
-                File systemConfigArea = new File(antHome.getFile(), "conf");
-                config.setSystemConfigArea(systemConfigArea);
-            }
-            File userConfigArea
-                 = new File(System.getProperty("user.home"), ".ant/conf");
-            config.setUserConfigArea(userConfigArea);
-
-            // set up the class loaders that will be used when running Ant
-            ClassLoader systemLoader = getClass().getClassLoader();
-            config.setSystemLoader(systemLoader);
-            URL toolsJarURL = ClassLocator.getToolsJarURL();
-            config.setToolsJarURL(toolsJarURL);
-
-            URL commonJarLib = new URL(libraryURL, "common/");
-            ClassLoader commonLoader
-                 = new URLClassLoader(LoaderUtils.getLocationURLs(commonJarLib,
-                "common.jar"), systemLoader);
-            config.setCommonLoader(commonLoader);
-
-            // core needs XML parser for parsing various XML components.
-            URL[] parserURLs
-                 = LoaderUtils.getLocationURLs(new URL(libraryURL, "parser/"),
-                "crimson.jar");
-            config.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);
-            config.setCoreLoader(coreLoader);
-
-            URL cliJarLib = new URL(libraryURL, "cli/");
-            ClassLoader frontEndLoader
-                 = new URLClassLoader(LoaderUtils.getLocationURLs(cliJarLib,
-                "cli.jar"), coreLoader);
-
-            //System.out.println("System Loader config");                
-            //LoaderUtils.dumpLoader(System.out, systemLoader);
-            // System.out.println("Front End Loader config");
-            // LoaderUtils.dumpLoader(System.out, frontEndLoader);
-
-            // Now start the front end by reflection.
-            Class commandLineClass = Class.forName(COMMANDLINE_CLASS, true,
-                frontEndLoader);
-
-            final Class[] param = {Class.forName("[Ljava.lang.String;"),
-                InitConfig.class};
-            final Method startMethod
-                 = commandLineClass.getMethod("start", param);
-            final Object[] argument = {args, config};
-            startMethod.invoke(null, argument);
-
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-}
-
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 5a67d5d..0000000
--- a/proposal/mutant/src/java/start/org/apache/tools/ant/Main.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;
-
-/**
- * Old Ant1 entry point
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- */
-public class Main {
-   /**
-     * Entry point for starting command line Ant
-     *
-     * @param args commandline arguments
-     */
-    public static void main(String[] args) {
-        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 d4a9493..0000000
--- a/proposal/mutant/xdocs/desc.xml
+++ /dev/null
@@ -1,607 +0,0 @@
-<?xml version="1.0"?>
-<document>
-
-  <properties>
-    <author email="conor@apache.org">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/.cvsignore b/proposal/myrmidon/.cvsignore
deleted file mode 100644
index d8133bc..0000000
--- a/proposal/myrmidon/.cvsignore
+++ /dev/null
@@ -1,10 +0,0 @@
-design*
-.ant.properties
-prj.el
-test
-emacs-jprj.el
-dist
-build
-todo
-*.ipr
-pretty.bat
\ No newline at end of file
diff --git a/proposal/myrmidon/WARNING b/proposal/myrmidon/WARNING
deleted file mode 100644
index 0e048b1..0000000
--- a/proposal/myrmidon/WARNING
+++ /dev/null
@@ -1,28 +0,0 @@
-*****************************  W A R N I N G  **********************************
-
-  All user accessible points in this software package are to be considered
-  "alpha". This means that the developer team is not investing _any_ effort
-  in providing back compatibility between alpha releases.
-  
-  This software will continue to be released as "alpha" until both code, 
-  schemas and APIs will be considered stable.
-  
-  Until then, there will be no warranty that newer versions will maintain back
-  compatibility even in the most simple cases.
-  
-  On the other hand, once "beta" status is reached, back incompatible changes
-  will be made only if absolutely necessary to reach "final" status.
-  
-  The Ant development team understands the importance of reliable
-  software as well as the importance of protecting user investiments by the
-  creation of a solid development platform that doesn't change.
-
-  On the other hand, being the Ant project a pioneer in many fields, this
-  cannot be guaranteed before a final status is reached for the software.
-  
-  Until then, no effort will be provided to guarantee back compatibility.
-  
-  You have been warned.
-
-*****************************  W A R N I N G  **********************************
-
diff --git a/proposal/myrmidon/antlib.xml b/proposal/myrmidon/antlib.xml
deleted file mode 100644
index 1609a51..0000000
--- a/proposal/myrmidon/antlib.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-==============================================================================
-
- Ant build file
-
-Authors:
- Peter Donald <peter@apache.org>
-
-Legal:
-  Copyright (c) 2000 The Apache Software Foundation. All Rights Reserved.
-
-==============================================================================
--->
-
-<project default="main" basedir=".">
-
-  <property name="build.dir" value="build"/>
-  <property name="build.lib" value="${build.dir}/lib"/>
-
-  <property name="src.base" value="src"/>
-  <property name="java.dir" value="${src.base}/java"/>
-  <property name="lib.dir" value="lib"/>
-
-  <!-- directory where you place generated code -->
-  <property name="gen.dir" value="${build.dir}/gen"/>
-
-  <property name="antlib.name" value="NONAME"/>
-  <property name="antlib.descriptor" value="${antlib.name}-ant-descriptor.xml"/>
-  <property name="antlib.role.descriptor" value="${antlib.name}-ant-roles.xml"/>
-
-  <path id="project.class.path">
-    <pathelement path="${java.class.path}" />
-    <fileset dir="${lib.dir}">
-      <include name="*.jar" />
-    </fileset>
-    <pathelement path="${build.classes}" />
-  </path>
-
-  <!-- Main target -->
-  <target name="main" depends="antlib-jar" />
-
-  <!-- Define the pattern which specifies file to include/exclude
-       in this antlib. -->
-  <target name="antlib-definition">
-      <patternset id="antlib.include">
-        <include name="org/apache/antlib/${antlib.name}/**"/>
-      </patternset>
-  </target>
-
-  <!-- runs xdoclet if need be -->
-  <target name="antlib-descriptors"
-          depends="antlib-definition"
-          unless="antlib-descriptors.omit">
-    <antlib-descriptor libName="${antlib.name}"
-                       destdir="${gen.dir}"
-                       classpathref="project.class.path">
-      <fileset dir="${java.dir}">
-        <patternset refid="antlib.include"/>
-      </fileset>
-    </antlib-descriptor>
-  </target>
-
-  <!-- Generate an "atl" jar file for this antlib. -->
-  <target name="antlib-jar" depends="antlib-descriptors">
-    <antlib-jar jarfile="${build.lib}/${antlib.name}.atl"
-                descriptor="${gen.dir}/${antlib.descriptor}"
-                rolesDescriptor="${gen.dir}/${antlib.role.descriptor}">
-      <fileset dir="${build.classes}">
-        <patternset refid="antlib.include"/>
-      </fileset>
-    </antlib-jar>
-  </target>
-
-</project>
diff --git a/proposal/myrmidon/audit.xml b/proposal/myrmidon/audit.xml
deleted file mode 100644
index b077e26..0000000
--- a/proposal/myrmidon/audit.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<project name="Myrmidon audit" default="main" basedir=".">
-
-    <property file="host.properties"/>
-    <property file="user.properties"/>
-    <property file="project.properties"/>
-    <property file="workspace.properties"/>
-
-    <property name="output.dir" value="output"/>
-    <property name="audit.dir" value="${output.dir}/audit"/>
-    <property name="audit.xml" location="${audit.dir}/audit.xml"/>
-    <property name="metrics.dir" value="${output.dir}/metrics"/>
-    <property name="metrics.xml" value="${metrics.dir}/metrics.xml"/>
-    <property name="audit.fix" location="false"/>
-
-    <!-- custom Audit rules -->
-    <path id="custom-rules">
-        <pathelement location="${metamata.home}/rules"/>
-    </path>
-
-    <path id="project.class.path">
-      <pathelement path="${java.class.path}" />
-      <fileset dir="lib">
-        <include name="*.jar" />
-      </fileset>
-    </path>
-
-    <target name="main" depends="audit" description="Do audit"/>
-
-    <target name="update" description="Update module source code">
-        <echo message="Updating module ${project.dir}..."/>
-        <cvs command="update" dest="${project.dir}"/>
-    </target>
-
-    <target name="audit">
-        <mkdir dir="${audit.dir}"/>
-        <maudit tofile="${audit.xml}" fix="${audit.fix}" metamatahome="${metamata.home}">
-<!--            <rulespath refid="custom-rules"/>-->
-            <classpath refid="project.class.path"/>
-            <sourcepath path="${project.src.path}"/>
-            <fileset dir="src/java" includes="**/*.java"/>
-            <fileset dir="src/main" includes="**/*.java"/>
-        </maudit>
-    </target>
-
-    <target name="metrics" description="Source code metrics">
-        <mkdir dir="${metrics.dir}"/>
-        <mmetrics tofile="${metrics.xml}" metamatahome="${metamata.home}" granularity="methods">
-            <classpath refid="project.class.path"/>
-            <sourcepath path="${project.src.path}"/>
-            <path path="${project.src.path}"/>
-        </mmetrics>
-    </target>
-
-    <!--
-      ==========================================================================
-      Common targets
-      ==========================================================================
-    -->
-
-    <target name="publish-audit" description="Publish Audit results">
-        <echo message="Generating results..."/>
-        <style in="${audit.xml}" out="null.tmp" style="maudit-frames.xsl">
-            <param name="output.dir" expression="${audit.dir}"/>
-        </style>
-
-        <echo message="Generating e-mail body..."/>
-        <style in="${audit.xml}" out="${audit.dir}/mail.txt" style="maudit-mail.xsl">
-            <param name="project.url" expression="${project.url}"/>
-        </style>
-    </target>
-
-    <target name="publish-metrics" description="Publish Metric results">
-        <echo message="Generating metrics results..."/>
-        <style in="${metrics.xml}" out="null.tmp" style="mmetrics-frames.xsl">
-            <param name="output.dir" expression="${metrics.dir}"/>
-        </style>
-
-        <echo message="Generating metrics e-mail body..."/>
-        <style in="${metrics.xml}" out="${metrics.dir}/mail.txt" style="metrics-mail.xsl">
-            <param name="project.url" expression="${project.url}"/>
-        </style>
-    </target>
-
-    <target name="sendmail">
-        <mail from="${mail.from}" tolist="${mail.to}" mailhost="${mail.host}"
-            subject="${mail.subject}" messagefile="${mail.file}"/>
-    </target>
-
-</project>
\ No newline at end of file
diff --git a/proposal/myrmidon/build.xml b/proposal/myrmidon/build.xml
deleted file mode 100644
index 6fb3fc8..0000000
--- a/proposal/myrmidon/build.xml
+++ /dev/null
@@ -1,612 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-==============================================================================
-
- Ant build file
-
-Authors:
- Peter Donald <peter@apache.org>
-
-Legal:
-  Copyright (c) 2000 The Apache Software Foundation. All Rights Reserved.
-
-==============================================================================
--->
-
-<project name="myrmidon" default="main" basedir=".">
-
-  <!--
-    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="name" value="myrmidon"/>
-  <property name="Name" value="Myrmidon"/>
-  <property name="version" value="0.01"/>
-  <property name="year" value="2000-2001"/>
-
-  <!--
-    these are here only for those who use jikes compiler. For other
-    developers this part makes no difference.
-  -->
-  <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="src.base" value="src"/>
-  <property name="manifest.dir" value="${src.base}/manifest"/>
-  <property name="java.dir" value="${src.base}/java"/>
-  <property name="script.dir" value="${src.base}/script"/>
-  <property name="lib.dir" value="lib"/>
-
-  <property name="dist.name" value="${Name}-${version}"/>
-  <property name="dist.dir" value="dist"/>
-  <property name="dist.bin" value="${dist.dir}/bin"/>
-  <property name="dist.lib" value="${dist.dir}/lib"/>
-  <property name="dist.ext" value="${dist.dir}/ext"/>
-
-  <property name="gen.dir" value="${build.dir}/gen"/>
-
-  <property name="test.dir" value="${build.dir}/test"/>
-  <property name="test.working.dir" value="${test.dir}/testcases"/>
-  <property name="test.classes" value="${test.dir}/classes"/>
-
-  <property name="constants.file" value="org/apache/myrmidon/Constants.java"/>
-
-  <path id="project.class.path">
-    <pathelement path="${java.class.path}" />
-    <fileset dir="${lib.dir}">
-      <include name="*.jar" />
-    </fileset>
-    <pathelement path="${build.classes}" />
-  </path>
-
-  <!-- Main target -->
-  <target name="main" depends="dist-lite" description="Builds the distribution"/>
-
-  <!-- lets see what is 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="project.class.path" />
-    <available property="netrexx.present"
-               classname="netrexx.lang.Rexx"
-               classpathref="project.class.path" />
-    <available property="trax.present"
-               classname="javax.xml.transform.Transformer"
-               classpathref="project.class.path" />
-    <available property="xslp.present"
-               classname="com.kvisco.xsl.XSLProcessor"
-               classpathref="project.class.path" />
-    <available property="xalan.present"
-               classname="org.apache.xalan.xslt.XSLTProcessorFactory"
-               classpathref="project.class.path" />
-    <available property="xalan2.present"
-               classname="org.apache.xalan.transformer.TransformerImpl"
-               classpathref="project.class.path" />
-    <available property="ejb.ejbc.present"
-               classname="weblogic.ejbc"
-               classpathref="project.class.path" />
-    <available property="ejb.DDCreator.present"
-               classname="weblogic.ejb.utils.DDCreator"
-               classpathref="project.class.path" />
-    <available property="ejb.wls.present"
-               classname="weblogic.Server"
-               classpathref="project.class.path" />
-    <available property="junit.present"
-               classname="junit.framework.TestCase"
-               classpathref="project.class.path" />
-    <available property="netcomp.present"
-               classname="com.oroinc.net.ftp.FTPClient"
-               classpathref="project.class.path" />
-    <available property="jcifs.present"
-               classname="jcifs.smb.SmbFile"
-               classpathref="project.class.path" />
-    <available property="starteam.present"
-               classname="com.starbase.util.Platform"
-               classpathref="project.class.path" />
-    <available property="antlr.present"
-               classname="antlr.Tool"
-               classpathref="project.class.path"/>
-    <available property="vaj.present"
-               classname="com.ibm.ivj.util.base.Workspace"
-               classpathref="project.class.path"/>
-    <available property="stylebook.present"
-               classname="org.apache.stylebook.Engine"
-               classpathref="project.class.path"/>
-    <available property="jakarta.regexp.present"
-               classname="org.apache.regexp.RE"
-               classpathref="project.class.path"/>
-    <available property="jakarta.oro.present"
-               classname="org.apache.oro.text.regex.Perl5Matcher"
-               classpathref="project.class.path" />
-    <available property="jmf.present"
-               classname="javax.sound.sampled.Clip"
-               classpathref="project.class.path"/>
-    <available property="icontract.present"
-               classname="com.reliablesystems.iContract.IContracted"
-               classpathref="project.class.path"/>
-    <available property="jdepend.present"
-               classname="jdepend.framework.JDepend"
-               classpathref="project.class.path"/>
-    <available property="log4j.present"
-               classname="org.apache.log4j.Category"
-               classpathref="project.class.path"/>
-    <!-- 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="project.class.path"/>
-    <available property="xalan.envcheck"
-               classname="org.apache.xalan.xslt.EnvironmentCheck"
-               classpathref="project.class.path" />
-
-    <available property="servlet.present"
-               classname="javax.servlet.Servlet"
-               classpathref="project.class.path"/>
-
-    <available property="adaptx.present"
-               classname="org.exolab.adaptx.xslt.XSLTProcessor"
-               classpathref="project.class.path" />
-    <available property="xerces.present"
-               classname="org.apache.xerces.parsers.SAXParser"
-               classpathref="project.class.path" />
-    <available property="bcel.present"
-               classname="org.apache.bcel.Constants"
-               classpathref="project.class.path" />
-
-    <condition property="javamail.complete">
-      <and>
-        <available classname="javax.activation.DataHandler"
-                   classpathref="project.class.path"/>
-        <available classname="javax.mail.Transport"
-                   classpathref="project.class.path"/>
-      </and>
-    </condition>
-
-  </target>
-
-  <!-- Compiles and installs the custom build tasks -->
-  <target name="custom-tasks">
-    <property name="custom-tasks-dir" value="${build.dir}/tasks"/>
-    <mkdir dir="${custom-tasks-dir}"/>
-    <javac srcdir="src/make" destdir="${custom-tasks-dir}">
-      <classpath refid="project.class.path"/>
-    </javac>
-    <copy file="${manifest.dir}/ant-descriptor.template" todir="${build.dir}/tasks"/>
-    <copy file="${manifest.dir}/ant-roles.template" todir="${build.dir}/tasks"/>
-
-    <taskdef name="antlib-jar" classname="org.apache.myrmidon.build.AntlibJarTask">
-      <classpath location="${custom-tasks-dir}"/>
-    </taskdef>
-
-    <taskdef name="antlib-descriptor" classname="org.apache.myrmidon.build.AntlibDescriptorTask">
-      <classpath>
-        <pathelement location="${custom-tasks-dir}"/>
-        <path refid="project.class.path"/>
-      </classpath>
-    </taskdef>
-  </target>
-
-  <!-- Compiles the source code -->
-  <target name="compile" depends="check_for_optional_packages">
-
-    <tstamp/>
-    <mkdir dir="${build.src}"/>
-    <copy file="${java.dir}/${constants.file}" tofile="${build.src}/${constants.file}"/>
-    <replace file="${build.src}/${constants.file}" token="@@VERSION@@" value="${version}" />
-    <replace file="${build.src}/${constants.file}" token="@@DATE@@" value="${TODAY}" />
-
-    <property name="ant.package" value="org/apache/tools/ant"/>
-    <property name="antlib.package" value="org/apache/antlib"/>
-    <property name="vfs.package" value="org/apache/aut/vfs"/>
-    <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"/>
-
-    <mkdir dir="${build.classes}"/>
-    <javac srcdir="src/main"
-           destdir="${build.classes}"
-           debug="${debug}"
-           optimize="${optimize}"
-           deprecation="${deprecation}">
-      <classpath refid="project.class.path"/>
-      <!--
-      <exclude name="${constants.file}"/>
-      <src path="${build.src}" />
-      -->
-      <src path="${java.dir}" />
-      <include name="**/*.java"/>
-
-      <exclude name="${regexp.package}/JakartaRegexp*.java"
-               unless="jakarta.regexp.present" />
-      <exclude name="${regexp.package}/JakartaOro*.java"
-               unless="jakarta.oro.present" />
-      <exclude name="${regexp.package}/Jdk14Regexp*.java"
-               unless="jdk1.4+" />
-      <exclude name="${ant.package}/AntSecurityManager.java"
-               unless="jdk1.2+" />
-      <exclude name="${ant.package}/listener/Log4jListener.java"
-               unless="log4j.present" />
-      <exclude name="${vfs.package}/provider/ftp/**" unless="netcomp.present"/>
-      <exclude name="${vfs.package}/provider/smb/**" unless="jcifs.present"/>
-
-      <exclude name="${optional.package}/IContract.java" unless="icontract.present" />
-      <exclude name="${optional.package}/Script.java" unless="bsf.present" />
-      <exclude name="${optional.package}/StyleBook.java" unless="stylebook.present" />
-      <exclude name="${optional.package}/NetRexxC.java" unless="netrexx.present" />
-      <exclude name="${antlib.package}/xml/TraXLiaison.java" unless="trax.present" />
-      <exclude name="${antlib.package}/xml/XalanLiaison.java" unless="xalan.present" />
-      <exclude name="${optional.package}/ejb/Ejbc*.java" unless="ejb.ejbc.present" />
-      <exclude name="${optional.package}/ejb/DDCreator*.java" unless="ejb.DDCreator.present" />
-      <exclude name="${optional.package}/ejb/WLRun.java" unless="ejb.wls.present" />
-      <exclude name="${optional.package}/ejb/WLStop.java" unless="ejb.wls.present" />
-      <exclude name="${optional.package}/ejb/EjbJar.java" unless="ejbjar.support" />
-      <exclude name="${optional.package}/ejb/*DeploymentTool.java" unless="ejbjar.support" />
-      <exclude name="${optional.package}/ejb/IPlanet*.java" unless="ejbjar.support" />
-      <exclude name="${optional.package}/Javah.java" unless="jdk1.2+" />
-      <exclude name="${optional.package}/junit/*" unless="junit.present" />
-      <exclude name="${optional.package}/net/**.java" unless="netcomp.present" />
-      <exclude name="${optional.package}/net/MimeMail.java" unless="javamail.complete" />
-      <exclude name="${optional.package}/scm/AntStarTeam*.java" unless="starteam.present" />
-      <exclude name="${optional.package}/ANTLR.java" unless="antlr.present" />
-      <exclude name="${optional.package}/ide/VAJ*.java" unless="vaj.present" />
-      <exclude name="${optional.package}/ide/VAJ*Servlet.java"
-               unless="servlet.present" />
-      <exclude name="${optional.package}/perforce/*.java" unless="jakarta.oro.present" />
-      <exclude name="${optional.package}/sound/*.java" unless="jmf.present" />
-      <exclude name="${optional.package}/junit/XMLResultAggregator.java"
-               unless="trax.present" />
-      <exclude name="${optional.package}/junit/AggregateTransformer.java"
-               unless="trax.present" />
-      <exclude name="${optional.package}/junit/XMLResultAggregator.java"
-               unless="xalan2.present" />
-      <exclude name="${optional.package}/junit/AggregateTransformer.java"
-               unless="xalan2.present" />
-      <exclude name="${optional.package}/junit/XalanExecutor.java"
-               unless="xalan2.present" />
-      <exclude name="${optional.package}/junit/Xalan2Executor.java"
-               unless="xalan2.present" />
-      <exclude name="${optional.package}/junit/Xalan1Executor.java"
-               unless="xalan.present" />
-      <exclude name="${optional.package}/jdepend/*" unless="jdepend.present" />
-      <exclude name="${optional.package}/sitraka/**" unless="some.regexp.support"/>
-      <exclude name="${optional.package}/metamata/MAudit*" unless="jakarta.oro.present"/>
-      <exclude name="${optional.package}/metamata/MMetrics*"
-               unless="trax.present"/>
-      <exclude name="${optional.package}/metamata/**" unless="jdk1.2+" />
-      <exclude name="${optional.package}/ManifestFile.java"
-               unless="jdk1.2+" />
-      <exclude name="${optional.type.package}/depend/*.java"
-               unless="bcel.present" />
-      <exclude name="${util.package}/depend/*.java"
-               unless="bcel.present" />
-      <exclude name="${optional.type.package}/depend/*.java"
-               unless="jdk1.2+" />
-      <exclude name="${util.package}/depend/*.java"
-               unless="jdk1.2+" />
-    </javac>
-
-    <copy todir="${build.classes}">
-      <fileset dir="${java.dir}">
-        <exclude name="**/*.java"/>
-      </fileset>
-    </copy>
-
-  </target>
-
-  <target name="jar-prepare" depends="custom-tasks, compile">
-    <mkdir dir="${build.lib}"/>
-
-    <!-- Define the packaging for the various jars -->
-    <patternset id="myrmidon-launcher.include">
-      <include name="org/apache/myrmidon/launcher/*" />
-    </patternset>
-
-    <patternset id="myrmidon-api.include">
-      <include name="org/apache/myrmidon/api/*" />
-      <include name="org/apache/myrmidon/aspects/*" />
-      <include name="org/apache/myrmidon/converter/*" />
-      <include name="org/apache/myrmidon/interfaces/**" />
-      <include name="org/apache/myrmidon/listeners/*" />
-      <include name="org/apache/myrmidon/framework/**" />
-      <include name="org/apache/aut/**" />
-      <include name="org/apache/tools/**" />
-    </patternset>
-    
-    <patternset id="myrmidon-container.include">
-      <include name="org/apache/myrmidon/components/**" />
-      <include name="org/apache/myrmidon/frontends/*" />
-      <include name="org/apache/myrmidon/*" />
-    </patternset>
-
-    <patternset id="selftest.include">
-      <include name="org/apache/antlib/selftest/**" />
-      <exclude name="org/apache/antlib/selftest/extension1/**" />
-    </patternset>
-
-    <patternset id="selftest-extension1.include">
-       <include name="org/apache/antlib/selftest/extension1/**" />
-    </patternset>
-  </target>
-
-  <!-- The generation of the descriptor is kept separated from the packaging
-       of the jars, since jarring is fast and XDoclet is pretty slow.-->
-  <target name="antlib-descriptors"
-          depends="jar-prepare"
-          unless="antlib-descriptors.omit"
-          description="Generates Antlib descriptors using XDoclet.">
-
-    <!-- The "builtin" descriptors include metainfo for both
-         myrmidon-api and myrmidon-container jars.
-         (Packaged with myrmidon-api.jar). -->
-    <antlib-descriptor libName="builtin"
-                       destdir="${gen.dir}"
-                       classpathref="project.class.path">
-      <fileset dir="${java.dir}">
-        <patternset refid="myrmidon-api.include"/>
-        <patternset refid="myrmidon-container.include"/>
-      </fileset>
-    </antlib-descriptor>
-
-    <antlib-descriptor libName="selftest"
-                       destdir="${gen.dir}"
-                       classpathref="project.class.path">
-      <fileset dir="${java.dir}">
-        <patternset refid="selftest.include"/>
-      </fileset>
-    </antlib-descriptor>
-  </target>
-
-  <!-- Package the jar files -->
-  <target name="jars" depends="antlib-descriptors">
-
-    <jar jarfile="${build.lib}/myrmidon-launcher.jar"
-         basedir="${build.classes}"
-         manifest="${manifest.dir}/myrmidon-launcher.mf">
-        <patternset refid="myrmidon-launcher.include"/>
-    </jar>
-
-    <jar jarfile="${build.lib}/myrmidon-container.jar"
-         basedir="${build.classes}"
-         manifest="${manifest.dir}/myrmidon-container.mf">
-        <patternset refid="myrmidon-container.include"/>
-    </jar>
-
-    <antlib-jar jarfile="${build.lib}/myrmidon-api.jar"
-                basedir="${build.classes}"
-                manifest="${manifest.dir}/myrmidon-api.mf"
-                rolesDescriptor="${gen.dir}/builtin-ant-roles.xml"
-                descriptor="${gen.dir}/builtin-ant-descriptor.xml"
-                servicesDescriptor="${manifest.dir}/core-services.xml" >
-      <patternset refid="myrmidon-api.include"/>
-    </antlib-jar>
-
-    <antlib-jar jarfile="${build.lib}/selftest.atl"
-                basedir="${build.classes}"
-                manifest="${manifest.dir}/selftest.mf"
-                descriptor="${gen.dir}/selftest-ant-descriptor.xml"
-                rolesDescriptor="${gen.dir}/selftest-ant-roles.xml">
-      <patternset refid="selftest.include"/>
-    </antlib-jar>
-
-    <jar jarfile="${build.lib}/selftest-extension1.jar"
-         basedir="${build.classes}"
-         manifest="${manifest.dir}/selftest-extension1.mf">
-      <patternset refid="selftest-extension1.include" />
-    </jar>
-
-    <!-- Simple cases handled by antlib.xml -->
-    <ant antfile="antlib.xml">
-      <property name="antlib.name" value="core"/>
-    </ant>
-
-    <ant antfile="antlib.xml">
-      <property name="antlib.name" value="file"/>
-    </ant>
-
-    <ant antfile="antlib.xml">
-      <property name="antlib.name" value="archive"/>
-    </ant>
-
-    <ant antfile="antlib.xml">
-      <property name="antlib.name" value="cvslib"/>
-    </ant>
-
-    <ant antfile="antlib.xml">
-      <property name="antlib.name" value="nativelib"/>
-    </ant>
-
-    <ant antfile="antlib.xml">
-      <property name="antlib.name" value="security"/>
-    </ant>
-
-    <ant antfile="antlib.xml">
-      <property name="antlib.name" value="runtime"/>
-    </ant>
-
-    <ant antfile="antlib.xml">
-       <property name="antlib.name" value="sound"/>
-    </ant>
-
-    <ant antfile="antlib.xml">
-      <property name="antlib.name" value="vfile"/>
-    </ant>
-  </target>
-
-  <!-- Compiles and runs the unit tests -->
-  <target name="test" depends="dist-lite" if="junit.present" description="Runs the unit tests">
-    <!-- Compile the unit tests -->
-    <mkdir dir="${test.classes}"/>
-    <javac srcdir="src/testcases"
-           destdir="${test.classes}"
-           debug="${debug}"
-           optimize="${optimize}"
-           deprecation="${deprecation}">
-      <classpath refid="project.class.path"/>
-    </javac>
-
-    <!-- Prepare test files -->
-    <delete dir="${test.working.dir}"/>
-    <copy todir="${test.working.dir}">
-        <fileset dir="etc/testcases"/>
-    </copy>
-
-    <!-- Prepare a dummy installation -->
-    <copy todir="${test.working.dir}/dist">
-        <fileset dir="${dist.dir}"/>
-    </copy>
-
-    <!-- Prepare the VFS tests -->
-    <property name="test.vfs.dir" location="${test.working.dir}/org/apache/aut/vfs"/>
-    <mkdir dir="${test.vfs.dir}/write-tests"/>
-    <mkdir dir="${test.vfs.dir}/basedir/emptydir"/>
-    <zip zipfile="${test.vfs.dir}/test.zip">
-        <fileset dir="${test.vfs.dir}" includes="basedir/**"/>
-    </zip>
-
-    <!-- Prepare deployer tests -->
-    <property name="test.deployer.dir"
-              value="${test.working.dir}/org/apache/myrmidon/components/deployer"/>
-    <mkdir dir="${test.deployer.dir}"/>
-    <jar jarfile="${test.deployer.dir}/test.atl">
-        <zipfileset dir="etc/testcases/org/apache/myrmidon/components/deployer"
-                    prefix="META-INF"
-                    includes="*.xml"/>
-    </jar>
-
-    <!-- Prepare type factory tests -->
-    <mkdir dir="${test.working.dir}/org/apache/myrmidon/interfaces/type"/>
-    <jar jarfile="${test.working.dir}/org/apache/myrmidon/interfaces/type/types.jar">
-        <fileset dir="${test.classes}" includes="org/apache/myrmidon/interfaces/type/MyType1.class"/>
-    </jar>
-
-    <!-- Prepare the project tests -->
-    <copy file="src/manifest/testcases-ant-descriptor.xml" tofile="${test.classes}/META-INF/ant-descriptor.xml"/>
-
-    <!-- Run all the tests -->
-    <junit printsummary="on"
-           fork="false">
-      <formatter type="brief" usefile="false"/>
-      <classpath>
-          <fileset dir="${test.working.dir}/dist/bin/lib" includes="**/*.jar"/>
-          <fileset dir="${test.working.dir}/dist/lib" includes="**/*.jar, **/*.atl" excludes="crimson.jar"/>
-      </classpath>
-      <classpath location="${test.classes}"/>
-
-      <!-- Pass config to the tests -->
-      <sysproperty key="test.basedir" value="${test.working.dir}"/>
-      <sysproperty key="test.smb.uri" value="smb://${vfs.user}:${vfs.password}@${vfs.host}/${vfs.user}/vfs"/>
-      <sysproperty key="test.ftp.uri" value="ftp://${vfs.user}:${vfs.password}@${vfs.host}/home/${vfs.user}/vfs"/>
-
-      <batchtest>
-        <fileset dir="${test.classes}">
-          <include name="**/*Test.class" unless="single.test"/>
-          <exclude name="**/Abstract*Test.class"/>
-          <include name="**/${single.test}Test.class" if="single.test"/>
-          <exclude name="**/BzipTest.class" unless="test.bzip"/>
-          <exclude name="**/SmbFileSystemTest.class" unless="test.smb"/>
-          <exclude name="**/FtpFileSystemTest.class" unless="test.ftp"/>
-        </fileset>
-      </batchtest>
-    </junit>
-  </target>
-
-  <!-- Creates the distribution -->
-  <target name="dist-lite" 
-          depends="jars"
-          description="Generates a minimal working distribution.">
-
-    <mkdir dir="${dist.bin}"/>
-    <mkdir dir="${dist.lib}"/>
-    <mkdir dir="${dist.ext}"/>
-
-    <copy file="${build.lib}/myrmidon-launcher.jar" tofile="${dist.bin}/myrmidon-launcher.jar" />
-    <copy file="${build.lib}/myrmidon-container.jar" tofile="${dist.bin}/lib/myrmidon-container.jar" />
-
-    <copy todir="${dist.lib}">
-      <fileset dir="${build.lib}">
-        <exclude name="selftest.atl"/>
-        <exclude name="myrmidon-container.jar"/>
-        <exclude name="myrmidon-launcher.jar"/>
-      </fileset>
-    </copy>
-
-    <copy todir="${dist.ext}">
-      <fileset dir="${build.lib}">
-        <include name="selftest.atl"/>
-        <include name="selftest-extension1.jar"/>
-      </fileset>
-    </copy>
-
-    <copy todir="${dist.lib}">
-      <fileset dir="${lib.dir}">
-        <exclude name="ant.jar"/>
-      </fileset>
-    </copy>
-
-    <copy todir="${dist.bin}">
-      <fileset dir="${script.dir}"/>
-    </copy>
-
-    <chmod dir="${dist.dir}" perm="go-rwx" />
-    <chmod file="${dist.bin}/ant" perm="u+x"/>
-    <fixcrlf srcdir="${dist.bin}" eol="crlf" includes="**/*.bat" />
-    <fixcrlf srcdir="${dist.bin}" eol="lf" includes="**/*.sh" />
-    <fixcrlf srcdir="${dist.bin}" eol="lf" includes="ant" />
-
-  </target>
-
-  <target name="dist-extralite" 
-          description="A faster version of dist-lite (no XDoclet).">
-      <property name="antlib-descriptors.omit" value="true"/>
-      <antcall target="dist-lite"/>
-  </target>
-
-  <!-- Creates the distribution -->
-  <target name="dist" depends="dist-lite,test" description="Builds the distribution"/>
-
-  <!-- Cleans up build and distribution directories -->
-  <target name="clean" description="Deletes all built files">
-    <delete dir="${build.dir}"/>
-    <delete dir="${dist.dir}" failonerror="false"/>
-    <delete>
-      <fileset dir="." includes="**/*~" defaultexcludes="no"/>
-    </delete>
-  </target>
-
-  <!-- Cleans up the compiled classes -->
-  <target name="clean-classes">
-      <delete dir="${build.classes}"/>
-  </target>
-
-  <!-- Rebuilds the distribution -->
-  <target name="rebuild" description="Rebuilds the distribution">
-    <antcall target="clean"/>
-    <antcall target="main"/>
-  </target>
-
-  <!-- Recompiles the classes, and builds the distribution -->
-  <target name="recompile" description="Recompiles and builds the the distribution">
-    <antcall target="clean-classes"/>
-    <antcall target="main"/>
-  </target>
-
-</project>
diff --git a/proposal/myrmidon/depend.xml b/proposal/myrmidon/depend.xml
deleted file mode 100644
index bef7abb..0000000
--- a/proposal/myrmidon/depend.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<project default="main" basedir=".">
-
-  <!--
-    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"/>
-
-  <path id="project.class.path">
-    <pathelement path="${java.class.path}" />
-    <fileset dir="lib">
-      <include name="*.jar" />
-    </fileset>
-    <pathelement path="build/classes" />
-  </path>
-
-  <!-- Main target -->
-  <target name="main" depends="style" />
-
-  <!-- lets see what is available -->
-  <target name="jdepend">
-    <jdepend outputfile="build/jdepend.xml" format="xml" fork="yes">
-      <classpath refid="project.class.path"/>
-      <sourcespath>
-          <pathelement location="src/java" />
-      </sourcespath>
-    </jdepend>
-
-    <style in="build/jdepend.xml" processor="trax" out="build/jdepend.html" style="../../src/etc/jdepend.xsl"/>
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/proposal/myrmidon/docs.xml b/proposal/myrmidon/docs.xml
deleted file mode 100644
index 06f3a70..0000000
--- a/proposal/myrmidon/docs.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<project name="Myrmidon Docs" 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"/>
-
-    <target name="main">
-        <taskdef name="anakia"
-                 classname="org.apache.velocity.anakia.AnakiaTask">
-          <classpath>
-            <fileset dir="${jakarta-site.dir}/lib">
-              <include name="*.jar"/>
-            </fileset>
-          </classpath>
-        </taskdef>
-
-        <anakia basedir="src/xdocs"
-                destdir="docs"
-                style="docs.vsl"
-                projectfile="stylesheets/project.xml"
-                includes="**/*.xml"
-                excludes="stylesheets/**"
-                velocitypropertiesfile="src/xdocs/velocity.properties"
-        />
-    </target>
-</project>
diff --git a/proposal/myrmidon/docs/buildfile.html b/proposal/myrmidon/docs/buildfile.html
deleted file mode 100644
index 7cb213e..0000000
--- a/proposal/myrmidon/docs/buildfile.html
+++ /dev/null
@@ -1,711 +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="Adam Murdoch">
-  <meta name="email" value="adammurdoch@apache.org">
-        
-      <title>Apache Myrmidon - User Guide</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-          <td>      <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>
-  </td>
-          <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></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>Myrmidon</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Introduction</a>
-  </li>
-          <li>      <a href="./getinvolved.html">Get Involved</a>
-  </li>
-          <li>      <a href="./user.html">Building Myrmidon</a>
-  </li>
-          <li>      <a href="./todo.html">Todo List</a>
-  </li>
-        </ul>
-      <p><strong>User Guide</strong></p>
-    <ul>
-          <li>      <a href="./buildfile.html">Build file</a>
-  </li>
-          <li>      <a href="./vfs.html">Virtual File System</a>
-  </li>
-        </ul>
-      <p><strong>Extending Ant</strong></p>
-    <ul>
-          <li>      <a href="./task.html">Task Writers HOWTO</a>
-  </li>
-          <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
-  </li>
-          <li>      <a href="./librarys.html">Library HOWTO</a>
-  </li>
-        </ul>
-      <p><strong>Container Design</strong></p>
-    <ul>
-        </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="Project File"><strong>Project File</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-The project file format is very similar to that of Ant 1.  The root element of
-the project file must be a <code>&lt;project&gt;</code> element.  It can
-take the following attributes:
-</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Attribute
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Description
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Default Value
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          name
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The project name.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The base-name of the project file, with the extension removed.
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          basedir
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The base directory for the project.  The base directory is used
-        to resolve all relative file names used in the project file.
-        
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The directory containing the project file.
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          default
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The name of the default target.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <code>main</code>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          version
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The project file version that the project is written for.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          None, must be <code>2.0</code>
-        </font>
-  </td>
-      </tr>
-        </table>
-                                <p>
-A <code>&lt;project&gt;</code> element can contain the following elements,
-in the order given below:
-</p>
-                                <ul>
-<li><a href="#Project References"><code>&lt;projectref&gt;</code></a></li>
-<li><a href="#Library Imports"><code>&lt;import&gt;</code></a></li>
-<li><a href="#Implicit Tasks">Implicit tasks</a></li>
-<li><a href="#Targets"><code>&lt;target&gt;</code></a></li>
-</ul>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Project References"><strong>Project References</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Project references allow the project to import, or reference, other projects.
-A <code>&lt;projectref&gt;</code> element takes the following attributes:</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Attribute
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Description
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Default Value
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          name
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The name to use to identify the referenced project.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Required
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          location
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The path to the project file to reference.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Required
-        </font>
-  </td>
-      </tr>
-        </table>
-                                <p>
-The targets of a referenced project can be used in the <code>depends</code> list
-of a target in the referencing project, using the following syntax:
-<code><i>project-name</i>-&gt;<i>target-name</i></code>.  Here is a simple 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>
-
-&lt;project version=&quot;2.0&quot;&gt;
-    &lt;!-- Reference another project --&gt;
-    &lt;projectref name=&quot;subproject&quot; location=&quot;subproject/build.xml&quot;/&gt;
-
-    &lt;!-- Use the &quot;compile&quot; target from the referenced project --&gt;
-    &lt;target name=&quot;main&quot; depends=&quot;subproject-&gt;compile&quot;&gt;
-        .. do some stuff ..
-    &lt;/target&gt;
-&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>
-                    </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="Library Imports"><strong>Library Imports</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Library imports allow the project to import the tasks and data-types from an
-antlib.  An <code>&lt;import&gt;</code> element takes the following attributes:</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Attribute
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Description
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Default Value
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          library
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The name of the library to import.  The <code>ext</code> directory
-        of the Myrmidon distribution is searched for a library file with
-        the given name, and an <code>atl</code> extension.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Required
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          type
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The type of definition to import.  Values include <code>task</code>,
-        and <code>data-type</code>.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          None
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          name
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The name of the type to import.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          None
-        </font>
-  </td>
-      </tr>
-        </table>
-                                <p>
-If the <code>type</code> and <code>name</code> attributes are not provided,
-the entire contents of the antlib are imported.
-</p>
-                                <p>The following example import the <code>&lt;my-task&gt;</code> task from
-the <code>my-tasks</code> antlib.</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;project version=&quot;2.0&quot;&gt;
-  &lt;!-- Import task &lt;my-task&gt; from the 'my-tasks' antlib. --&gt;
-  &lt;import library=&quot;my-tasks&quot; type=&quot;task&quot; name=&quot;my-task&quot;/&gt;
-
-  &lt;target name=&quot;main&quot;&gt;
-     &lt;my-task some-prop=&quot;..&quot;/&gt;
-  &lt;/target&gt;
-&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>
-                    </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="Implicit Tasks"><strong>Implicit Tasks</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Implicit tasks are run before any of the project's targets are run.  Any task
-can be used, including <code>&lt;property&gt;</code> and data-type instances.
-Implicit tasks can be used to initialise the project.  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>
-
-&lt;project version=&quot;2.0&quot;&gt;
-
-  &lt;property name=&quot;some-property&quot; value=&quot;some value&quot;/&gt;
-  &lt;path id=&quot;classpath&quot;&gt;
-    &lt;fileset dir=&quot;lib&quot;/&gt;
-  &lt;/path&gt;
-  &lt;log&gt;Set classpath to ${classpath}&lt;/log&gt;
-
-  &lt;target name=&quot;main&quot;&gt;
-    .. do some stuff ..
-  &lt;/target&gt;
-
-&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>
-                    </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="Targets"><strong>Targets</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Targets have the same format as in Ant 1.x, though some of the behaviour
-is different.  A <code>&lt;target&gt;</code> element takes the following
-attributes:</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Attribute
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Description
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Default Value
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          name
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The name of the target.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Required
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          depends
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          A comma-separated list of targets that this target depends on.
-        This list can contain targets from referenced projects.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          None
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          if
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Only execute this target if the specified property is set, and not
-        equal to <code>false</code>.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          None
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          unless
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Do not execute this target if the specified property is set, and not
-        equal to <code>false</code>.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          None
-        </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="Tasks"><strong>Tasks</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-    Listed below are some of the current set of tasks.  You can find example
-    usages of these tasks in the sample project file <code>src/make/sample.ant</code>.
-    </p>
-                                <h3><code>&lt;condition&gt;</code></h3>
-                                <p>Sets a property if a particular condition is true.  See
-    <a href="#Conditions">Conditions</a> for a list of available conditions.</p>
-                                <h3><code>&lt;fail&gt;</code></h3>
-                                <p>Causes the build to fail.</p>
-                                <h3><code>&lt;if&gt;</code></h3>
-                                <p>Conditionally executes a set of tasks.</p>
-                                <h3><code>&lt;load-properties&gt;</code></h3>
-                                <p>Loads a set of properties from a file.</p>
-                                <h3><code>&lt;log&gt;</code></h3>
-                                <p>Writes a log message.</p>
-                                <h3><code>&lt;property&gt;</code></h3>
-                                <p>Sets a property.</p>
-                                <h3><code>&lt;try-catch&gt;</code></h3>
-                                <p>Runs a set of tasks, with a provided error and clean-up handler.</p>
-                                <h3><code>&lt;converter-def&gt;</code></h3>
-                                <p>Register a type converter.  These are used when configuring a task
-    or data-type from attributes.</p>
-                                <h3><code>&lt;type-def&gt;</code></h3>
-                                <p>Register a task or data-type.</p>
-                                <h3><code>&lt;import&gt;</code></h3>
-                                <p>Register the contents of an antlib.</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="Conditions"><strong>Conditions</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>The following conditions are available </p>
-                                <h3><code>&lt;and&gt;</code></h3>
-                                <p>Evaluates a set of nested conditions, and AND them together.  Evaluation is
-    lazy.  An empty <code>&lt;and&gt;</code> condition evaluates to true.</p>
-                                <h3><code>&lt;available&gt;</code></h3>
-                                <p>Tests if a particular class or resource is available.</p>
-                                <h3><code>&lt;file-test&gt;</code></h3>
-                                <p>Tests a file against a set of <a href="vfs.html#File Selectors">file selectors</a>.</p>
-                                <h3><code>&lt;is-set&gt;</code></h3>
-                                <p>Tests whether a proeprty is set, and not set to 'false'.</p>
-                                <h3><code>&lt;or&gt;</code></h3>
-                                <p>Evaluates a set of nested conditions, and OR them together.  Evaluation is
-    lazy.  An empty <code>&lt;or&gt;</code> evaluates to true.</p>
-                                <h3><code>&lt;os&gt;</code></h3>
-                                <p>Tests which operating system the build is running on.</p>
-                                <h3><code>&lt;not&gt;</code></h3>
-                                <p>Negates a nested condition.</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="File Name Mappers"><strong>File Name Mappers</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>The following file name mappers are available:</p>
-                                <h3><code>&lt;chain&gt;</code></h3>
-                                <p>Applies a set of nested file name mappers to file names.</p>
-                                <h3><code>&lt;flatten&gt;</code></h3>
-                                <p>Maps all file names to a single directory.</p>
-                                <h3><code>&lt;prefix&gt;</code></h3>
-                                <p>Adds a prefix to the front of each file name.</p>
-                                <h3><code>&lt;map-extension&gt;</code></h3>
-                                <p>Changes the extension of file names.</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/myrmidon/docs/classloader.html b/proposal/myrmidon/docs/classloader.html
deleted file mode 100644
index ca22503..0000000
--- a/proposal/myrmidon/docs/classloader.html
+++ /dev/null
@@ -1,208 +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="Peter Donald">
-  <meta name="email" value="peter@apache.org">
-        
-      <title>Apache Myrmidon - On ClassLoaders in Ant2</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-          <td>      <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>
-  </td>
-          <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></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>Myrmidon</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Introduction</a>
-  </li>
-          <li>      <a href="./getinvolved.html">Get Involved</a>
-  </li>
-          <li>      <a href="./user.html">Building Myrmidon</a>
-  </li>
-          <li>      <a href="./todo.html">Todo List</a>
-  </li>
-        </ul>
-      <p><strong>User Guide</strong></p>
-    <ul>
-          <li>      <a href="./buildfile.html">Build file</a>
-  </li>
-          <li>      <a href="./vfs.html">Virtual File System</a>
-  </li>
-        </ul>
-      <p><strong>Extending Ant</strong></p>
-    <ul>
-          <li>      <a href="./task.html">Task Writers HOWTO</a>
-  </li>
-          <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
-  </li>
-          <li>      <a href="./librarys.html">Library HOWTO</a>
-  </li>
-        </ul>
-      <p><strong>Container Design</strong></p>
-    <ul>
-        </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="ClassLoader Management"><strong>ClassLoader Management</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>In many ways Ant2 needs to follow rules similar to a number of 
-different application servers with respect to ClassLoader management. 
-Ant2 will create a number of different ClassLoaders that have access 
-to different sets of resources (and thus Classes). The main reason
-for this arrangment is to partition different sections of the 
-application such as the Container, the Task API, task/type libraries 
-and support libraries.</p>
-                                <p>The recomended structure for ClassLoader relationships is a hierarchy.
-When a ClassLoader is asked for a resource (or a class) it first delegates
-to it's parent to ask for the resource. If the resource is not present in 
-its parent ClassLoader then the ClassLoader attempts to locate the resource
-in it's own store. In practice this means that all the classes (and static 
-variables defined by said classes) in a parent ClassLoader are shared with 
-the child ClassLoaders.</p>
-                                <p>Using kooky ascii art, the specific ClassLoader structure for Ant2 is as 
-follows:</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>
-      Bootstrap
-          |
-       System
-          |
-       Common
-      /      \
- Container  Shared
-             /   \
-        Antlib1  Antlib2 ... 
-</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>
-                                <ul>
-  <li>
-    The <strong>Bootstrap</strong> ClassLoader contains the classes and resources 
-    provided by the Java runtime.
-  </li>
-  <li>
-    The <strong>System</strong> ClassLoader contains the classes that were made accessible 
-    via the CLASSPATH environment variable. If the standard ant script was used then this 
-    should only contain the classes that are used to bootstrap the ant runtime. ie 
-    <code>$ANT_HOME/bin/ant-launcher.jar</code>
-  </li>
-  <li>
-    The <strong>Common</strong> ClassLoader contains the classes and resources 
-    that are made visible to both the Container and to all the ant type librarys. This 
-    contains all the classes that the Container uses to communicate with tasks and other
-    supporting infrastructure. In particular it contains the following APIs;
-    <ul>
-      <li>
-        <em>Task API</em> - Contains the classes that are part of the API used
-        to define tasks.
-      </li>
-      <li>
-        <em>ProjectListener API</em> - Contains the classes necessary to define new 
-        ProjectListeners.
-      </li>
-      <li>
-        <em>Aspect API</em> - Contains the classes that are used to define Aspects 
-        of the container.
-      </li>
-      <li>
-        <em>Container API</em> - Contains the interfaces that are required to communicate
-        with the objects deep within the container. <strong>NOTE</strong>: These interfaces
-        are not to be used by user tasks but are made available so that certain tasks (such 
-        as &lt;antcall/&gt;) can be implemented. However they are subject to change without 
-        notice between between different ant2 versions.
-      </li>
-    </ul>
-    <p>
-      These classes are loaded from all the jars present in the <code>$ANT_HOME/lib</code>
-      directory. 
-    </p>
-  </li>
-  <li>
-    The <strong>Container</strong> ClassLoader contains all the classes and resources
-    that are part of the actual implementation of the Container. These classes are not
-    directly accessible to any Ant library or task. Some of the classes are indirectly 
-    accessible to tasks and other elements defined in the ant librarys as they implement 
-    interfaces defined in the <strong>Common</strong> ClassLoader. The classes that are 
-    stored in jars in the <code>$ANT_HOME/bin/lib/</code> directory.
-  </li>
-  <li>
-    The <strong>Shared</strong> ClassLoader contains all the classes and resources
-    that are shared across all of the ant librarys (unless they are als needed by the
-    container in which case they should be placed int the <strong>Container</strong> 
-    ClassLoader). This ClassLoader is populated by all the jars that are contained in
-    the <code>$ANT_HOME/shared/</code> directory.
-  </li>
-  <li>
-    The <strong>AntLib</strong> ClassLoaders each contain the classes and resources
-    that required by that particular library. Note that in some cases a single Ant 
-    Library will manifest as a single ClassLoader containing a single jar. However 
-    in some cases it is possible for one Ant Library to have multiple jars in its 
-    ClassLoader or even have multiple ClassLoaders. See XXXX for further details.
-  </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/proposal/myrmidon/docs/getinvolved.html b/proposal/myrmidon/docs/getinvolved.html
deleted file mode 100644
index 5a39cd3..0000000
--- a/proposal/myrmidon/docs/getinvolved.html
+++ /dev/null
@@ -1,110 +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="Adam Murdoch">
-  <meta name="email" value="adammurdoch@apache.org">
-        
-      <title>Apache Myrmidon - Get Involved</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-          <td>      <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>
-  </td>
-          <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></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>Myrmidon</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Introduction</a>
-  </li>
-          <li>      <a href="./getinvolved.html">Get Involved</a>
-  </li>
-          <li>      <a href="./user.html">Building Myrmidon</a>
-  </li>
-          <li>      <a href="./todo.html">Todo List</a>
-  </li>
-        </ul>
-      <p><strong>User Guide</strong></p>
-    <ul>
-          <li>      <a href="./buildfile.html">Build file</a>
-  </li>
-          <li>      <a href="./vfs.html">Virtual File System</a>
-  </li>
-        </ul>
-      <p><strong>Extending Ant</strong></p>
-    <ul>
-          <li>      <a href="./task.html">Task Writers HOWTO</a>
-  </li>
-          <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
-  </li>
-          <li>      <a href="./librarys.html">Library HOWTO</a>
-  </li>
-        </ul>
-      <p><strong>Container Design</strong></p>
-    <ul>
-        </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="Get Involved"><strong>Get Involved</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>There are plenty of things you can do to help out with Myrmidon.  The Todo
-            list below describes items which still need to be done.  Of course, since
-            this is an open-source project, there's plenty of scope for experimentation,
-            and you can pretty much make up your own items to work on.</p>
-                                <p>Some things that are worth reading if you do want to get involved:</p>
-                                <ul>
-                <li>The <a href="http://jakarta.apache.org/ant/ant2/">Ant 2</a> goals and requirements.</li>
-                <li>The <a href="http://jakarta.apache.org/ant/ant2/actionlist.html">Ant 1.9 Action List</a>.</li>
-                <li>The Jakarta Project's <a href="http://jakarta.apache.org/site/getinvolved.html">Get Involved</a> page.</li>
-            </ul>
-                                <p>There is no Ant 2 or Myrmidon mailing list yet, so direct any questions
-            or comments you have to the ant-dev mailing list.</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/myrmidon/docs/index.html b/proposal/myrmidon/docs/index.html
deleted file mode 100644
index 8e0dfed..0000000
--- a/proposal/myrmidon/docs/index.html
+++ /dev/null
@@ -1,178 +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="Adam Murdoch">
-  <meta name="email" value="adammurdoch@apache.org">
-        
-      <title>Apache Myrmidon - Introduction</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-          <td>      <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>
-  </td>
-          <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></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>Myrmidon</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Introduction</a>
-  </li>
-          <li>      <a href="./getinvolved.html">Get Involved</a>
-  </li>
-          <li>      <a href="./user.html">Building Myrmidon</a>
-  </li>
-          <li>      <a href="./todo.html">Todo List</a>
-  </li>
-        </ul>
-      <p><strong>User Guide</strong></p>
-    <ul>
-          <li>      <a href="./buildfile.html">Build file</a>
-  </li>
-          <li>      <a href="./vfs.html">Virtual File System</a>
-  </li>
-        </ul>
-      <p><strong>Extending Ant</strong></p>
-    <ul>
-          <li>      <a href="./task.html">Task Writers HOWTO</a>
-  </li>
-          <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
-  </li>
-          <li>      <a href="./librarys.html">Library HOWTO</a>
-  </li>
-        </ul>
-      <p><strong>Container Design</strong></p>
-    <ul>
-        </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="What is Myrmidon?"><strong>What is Myrmidon?</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-Myrmidon is one of the Ant 2 proposals currently in development.  You can
-read more about the goals of Ant 2
-<a href="http://jakarta.apache.org/ant/ant2/">here</a>.
-</p>
-                                <p>
-Myrmidon is a general-purpose <i>task engine</i>.  It contains the basic
-building blocks for assembling any sort of task-based tool.  Ant 2
-is an example of such a tool, which could be assembled using the Myrmidon task
-engine, and a library of build related tasks.
-</p>
-                                <p>
-Currently, Myrmidon is a prototype of what a task engine might look.  It
-includes a small set of tasks and data types.  We are currently porting
-many of the Ant 1.x tasks to the Myrmidon task engine.
-</p>
-                                <p>
-</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="Differences to Ant 1.x"><strong>Differences to Ant 1.x</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Some of the differences between Ant 1.x and Myrmidon:</p>
-                                <ul>
-
-<li>
-Groups of tasks can be assembled into self-describing <i>antlib</i> task
-libraries.  This makes it very easy to distribute and install tasks and data-types.
-</li>
-
-<li>
-A project can import other projects, and reference their targets.
-</li>
-
-<li>
-Changes to the property model:
-<ul>
-    <li>Properties and data type references now share the same namespace.</li>
-    <li>Properties are mutable.</li>
-    <li>Properties are scoped into global, local, and parent contexts.</li>
-    <li><code>if</code> and <code>unless</code> checks now test the property
-    value against <code>false</code>, in addition to testing set/not-set.</li>
-</ul>
-</li>
-
-<li>
-Changes to task and data-type API:
-<ul>
-    <li>An interface based API, through which a task interacts with the
-    task engine, and the services it provides.</li>
-    <li>A well-defined object lifecycle.</li>
-    <li>Polymorphic types are supported when objects are configured.</li>
-    <li>Reference handling is handled automatically when objects are configured.</li>
-    <li>Aspects can be used to decorate tasks, to add facilities like logging,
-    error handling, or user preferences.</li>
-</ul>
-</li>
-
-<li>
-A set of well-defined services and APIs have been introduced, to allow
-tasks to do their work without depending on other tasks:
-<ul>
-    <li>Execute external commands.</li>
-    <li>Execute other tasks.</li>
-    <li>Manage ClassLoaders and Class-paths.</li>
-    <li>Virtual file system (in progress).</li>
-    <li>Execute Java applications (in progress).</li>
-    <li>...</li>
-</ul>
-</li>
-
-</ul>
-                                <p>There are plenty more features planned.  You can read about them <a href="todo.html">here</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/proposal/myrmidon/docs/librarys.html b/proposal/myrmidon/docs/librarys.html
deleted file mode 100644
index 729f58b..0000000
--- a/proposal/myrmidon/docs/librarys.html
+++ /dev/null
@@ -1,327 +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="Peter Donald">
-  <meta name="email" value="peter@apache.org">
-        
-      <title>Apache Myrmidon - On Librarys in Ant2</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-          <td>      <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>
-  </td>
-          <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></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>Myrmidon</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Introduction</a>
-  </li>
-          <li>      <a href="./getinvolved.html">Get Involved</a>
-  </li>
-          <li>      <a href="./user.html">Building Myrmidon</a>
-  </li>
-          <li>      <a href="./todo.html">Todo List</a>
-  </li>
-        </ul>
-      <p><strong>User Guide</strong></p>
-    <ul>
-          <li>      <a href="./buildfile.html">Build file</a>
-  </li>
-          <li>      <a href="./vfs.html">Virtual File System</a>
-  </li>
-        </ul>
-      <p><strong>Extending Ant</strong></p>
-    <ul>
-          <li>      <a href="./task.html">Task Writers HOWTO</a>
-  </li>
-          <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
-  </li>
-          <li>      <a href="./librarys.html">Library HOWTO</a>
-  </li>
-        </ul>
-      <p><strong>Container Design</strong></p>
-    <ul>
-        </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="Library Management"><strong>Library Management</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Long ago there was identified the need for librarys that contain
-tasks and other elements present in the build file. This document
-attempts to describe the mechanism via which these libraries will be
-defined and used in Ant2. The librarys (also referred to as
-deployments) will be termed antlibs.</p>
-                                <p>Ant librarys can be packaged and signed into a ANt Type Library
-format (.atl) using the standard Java Archive tools. (For details on
-the .jar file format see the
-<a href="http://java.sun.com/j2se/1.3/docs/guide/jar/index.html">
-Jar Specification</a>.</p>
-                                <p>When packaged into such a form the META-INF/ directory contains
-ant specific descriptors in addition to the standard Jar manifest
-and other descriptor files. The archive will also contain the
-<code>.class</code> files for all the tasks and other types the
-library defines. It may also contain additional resources that can
-be referenced in the build file (an example being DTDs).</p>
-                                <p>The library may also need access to other librarys or resources
-to perform its job. For instance, if the task loaded an XML document
-and then processed said document using the <em>Trax API</em> then
-the Ant library needs to have access to the <em>Trax API</em> and an
-implementation of the API. The Antlib mechanism thus uses the standard
-"Optional Package" Specification to declare dependencies on other
-libraries.</p>
-                                <p>The libraries will usually be installed in standard locations that
-make it possible for the Ant container to automatically locate and scan
-the libraries. It will also be possible for the users to specify
-additional search locations or even the specific location of ant
-libraries.</p>
-                                <p>The following sections will describe each of these different facets
-in greater detail.</p>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Descriptors"><strong>Descriptors</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>FIXME: Import this part from other doco</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="Class and Resource Files"><strong>Class and Resource Files</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>The class and resources files should be stored as in standard jars. The
-root directory being the base via which code and resources are loaded. So
-the <code>.class</code> file for the Java class <code>com.biz.tasks.Mytask</code>
-would be stored in <code>/com/biz/tasks/Mytask.class</code></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="Dependencies"><strong>Dependencies</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>It is often the case that a library will need external resources. The
-example given above described dependence on an external XML library. The
-ant library thus needs a mechanism via which to declare dependencies on
-external libraries.</p>
-                                <p>Ant2 uses the "Optional Package" mechanism. Prior to JDK1.3, an "Optional
-Package" was known as an <em>Extension</em>. The specification for this
-mechanism is available in the JDK1.3 documentation in the directory
-<code>$JDK_HOME/docs/guide/extensions/versioning.html</code>. 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>
-                                <p>This mechanism was adopted as it is an established standard. The standard
-is also begining to be adopted by other specifications such as the <em>Servlet
-2.3 API</em>. Thus we are likely to see an increase of jars using this mechanism
-to specify dependencies.</p>
-                                <p>The "Optional Package" mechanism allows jars to specify dependencies on other
-jars that implement a particular specification at particular version levels. For
-example you could specify a dependency on the Trax 1.1 API by adding the following
-to the manifest of your jar.</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>
-Extension-List: trax
-trax-Extension-Name: Java API for XML Parsing
-trax-Specification-Version: 1.1
-</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>In some cases you may also wish to specify a dependency on a specific vendors
-implementation. For instance you may need to use xalan due to it implementing a
-particular extension you need. In that case you manifest may contain;</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>
-Extension-List: trax
-trax-Extension-Name: Java API for XML Parsing
-trax-Specification-Version: 1.1
-trax-Implementation-Title: org.apache.xalan.xslt
-trax-Implementation-Version: 2.1.0
-trax-Implementation-Vendor: Apache Software Foundation
-</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>In many cases there will be no distinction between the specification and
-the implementation of a library. For instance the Velocity project only has
-one implementation and one specification. In which case it is sufficient to
-just declare a dependency on the Velocity "Specification". A library that uses
-both the Trax API and the Velocity project may look 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>
-Extension-List: trax velocity
-velocity-Extension-Name: org.apache.velocity
-velocity-Specification-Version: 1.0
-trax-Extension-Name: Java API for XML Parsing
-trax-Specification-Version: 1.1
-trax-Implementation-Title: org.apache.xalan.xslt
-trax-Implementation-Version: 2.1.0
-trax-Implementation-Vendor: Apache Software Foundation
-</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>To make other jars available to Ant librarys as "Optional Packages"
-or Extensions then you need to add a few lines to the manifest of the
-other jar. The minimal manifest is the following;</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>
-Extension-Name: org.realityforge.dve
-Specification-Vendor: Peter Donald
-Specification-Version: 1.0
-</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>It is important to note that looking for dependencies is recursive. For example,
-if the ant library depends upon jar A and and A depends on B then both A and B will
-need to be loaded by the container.</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="Implementation Notes"><strong>Implementation Notes</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>So far there has been no mention of implementation strategies for
-managing ClassLoaders and other details about where the "Optional Packages"
-are stored. This section will outline such details but they could change
-in the future. The above specification will still be accurate but the approach
-to implementing specification will be different.</p>
-                                <p>In the current architecture all of the "Optional Packages" are assumed to
-be stored in the <code>$ANT_HOME/ext</code> directory. The runtime will scan
-this directory for jars and add all the "optional Packages" found into a
-registry. This registry will be used by the library loading mechanism to locate
-all the "Optional Packages". The user is able to specify an alternative directory
-or add a new directory to search on the commandline.</p>
-                                <p>When the container attempts to load an ant library it will also try to load
-any needed dependencies. First it will check the parent ClassLoaders to see if any
-of them contain the required dependencies. If not then it will search the
-"Optional Packages" registry. If the dependency is not found then a error will be
-signaled. If the dependency is found in the "Optional Packages" registry then it is
-loaded by the same ClassLoader that is used to load the Ant library.</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/proposal/myrmidon/docs/task.html b/proposal/myrmidon/docs/task.html
deleted file mode 100644
index 33b5ab2..0000000
--- a/proposal/myrmidon/docs/task.html
+++ /dev/null
@@ -1,232 +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="Peter Donald">
-  <meta name="email" value="peter@apache.org">
-        
-      <title>Apache Myrmidon - Writing a task</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-          <td>      <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>
-  </td>
-          <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></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>Myrmidon</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Introduction</a>
-  </li>
-          <li>      <a href="./getinvolved.html">Get Involved</a>
-  </li>
-          <li>      <a href="./user.html">Building Myrmidon</a>
-  </li>
-          <li>      <a href="./todo.html">Todo List</a>
-  </li>
-        </ul>
-      <p><strong>User Guide</strong></p>
-    <ul>
-          <li>      <a href="./buildfile.html">Build file</a>
-  </li>
-          <li>      <a href="./vfs.html">Virtual File System</a>
-  </li>
-        </ul>
-      <p><strong>Extending Ant</strong></p>
-    <ul>
-          <li>      <a href="./task.html">Task Writers HOWTO</a>
-  </li>
-          <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
-  </li>
-          <li>      <a href="./librarys.html">Library HOWTO</a>
-  </li>
-        </ul>
-      <p><strong>Container Design</strong></p>
-    <ul>
-        </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="Writing a Task"><strong>Writing a Task</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>In ant1 it was very easy to write your own task. In Ant2 we plan 
-to make it even easier. To write a basic task simply follow the following
-formula.</p>
-                                <ol>
-  <li>
-    Create a Java class that extends 
-    <code>org.apache.myrmidon.api.AbstractTask</code>
-  </li>
-  <li>
-    For each attribute, write a setter method. The setter method 
-    must be a public void method that takes a single argument. The name 
-    of the method must begin with "set", followed by the attribute name, with 
-    the first character of the name in uppercase, and the rest in lowercase. 
-    The type of the attribute can be:
-    <ul>
-      <li>String</li>
-      <li>
-        Any primitive type - they are converted for you from their 
-        String-representation in the buildfile
-      </li>
-      <li>
-        File - the string representation will be interpreted relative to 
-        the project's basedir.
-      </li>
-    </ul>
-  </li>
-  <li>
-    For each nested element create a public void method that takes a single 
-    argument. The name of the method must begin with "add", followed by the 
-    attribute name, with the first character of the name in uppercase, and 
-    the rest in lowercase. The type of the parameter is an object with a 
-    no-arguement constructor. It is configured in exactly the same was a 
-    task is configured (via setters and adders) and then added to the task.
-  </li>
-  <li>
-    Write a public void method named "execute" with no arguments that 
-    throws a TaskException. This is the method called to do the 
-    actual work of the task.
-  </li>
-</ol>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="A Basic Example"><strong>A Basic Example</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>So a basic task that has one attribute named "message" and just prints 
-out this message is as simple as;</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>
-package org.realityforge.tasks;
-
-import org.apache.myrmidon.api.AbstractTask;
-import org.apache.myrmidon.api.TaskException;
-
-public class SystemOutPrinterTask 
-    extends Task 
-{
-    private String m_message;
-
-    // The setter for the &quot;message&quot; attribute
-    public void setMessage( final String message )
-    {
-        m_message = message;
-    }
-
-    // The method executing the task
-    public void execute() 
-        throws TaskException 
-    {
-        System.out.println( m_message );
-    }
-}
-</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>To use this task you <em>could</em> create a library but instead we will 
-just use &lt;taskdef&gt; to define the task. An example usage would be;</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;project version=&quot;2.0&quot;&gt;
-
-  &lt;target name=&quot;main&quot;&gt;
-    &lt;taskdef name=&quot;printer&quot; 
-             classname=&quot;org.realityforge.tasks.SystemOutPrinterTask&quot;
-             classpath=&quot;build/classes&quot;/&gt;
-
-    &lt;printer message=&quot;Hello World!&quot;/&gt;
-  &lt;/target&gt;
-&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>
-                    </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/proposal/myrmidon/docs/todo.html b/proposal/myrmidon/docs/todo.html
deleted file mode 100644
index f5c3c33..0000000
--- a/proposal/myrmidon/docs/todo.html
+++ /dev/null
@@ -1,360 +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="Adam Murdoch">
-  <meta name="email" value="adammurdoch@apache.org">
-        
-      <title>Apache Myrmidon - Get Involved</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-          <td>      <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>
-  </td>
-          <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></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>Myrmidon</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Introduction</a>
-  </li>
-          <li>      <a href="./getinvolved.html">Get Involved</a>
-  </li>
-          <li>      <a href="./user.html">Building Myrmidon</a>
-  </li>
-          <li>      <a href="./todo.html">Todo List</a>
-  </li>
-        </ul>
-      <p><strong>User Guide</strong></p>
-    <ul>
-          <li>      <a href="./buildfile.html">Build file</a>
-  </li>
-          <li>      <a href="./vfs.html">Virtual File System</a>
-  </li>
-        </ul>
-      <p><strong>Extending Ant</strong></p>
-    <ul>
-          <li>      <a href="./task.html">Task Writers HOWTO</a>
-  </li>
-          <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
-  </li>
-          <li>      <a href="./librarys.html">Library HOWTO</a>
-  </li>
-        </ul>
-      <p><strong>Container Design</strong></p>
-    <ul>
-        </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="Todo List"><strong>Todo List</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>The broad goal is to grow Myrmidon from a prototype task engine into a fully
-            fledged build system, that can serve as the basis for Ant 2.  The following
-            sections describe some of the many things which still need to be done to
-            achieve that goal.  This list is currently under construction.</p>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Self Hosting"><strong>Self Hosting</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Myrmidon must be able to build itself.  Currently, it is built using
-                Ant 1.x.  Ultimately, Myrmidon should be able to build itself from exactly the
-                same build file.  To start with, however, there is no need for Myrmidon to be
-                able to do this.  Myrmidon should also be able to be bootstrapped (that is, be
-                able to be built from scratch, without using Ant 1.x at all).</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="Ant 1.x Compatibility"><strong>Ant 1.x Compatibility</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>There are 2 parts to this broad topic:  Allow Ant 1.x build scripts to be
-                executed by Myrmidon, and allow Ant 1.x tasks to be executed unmodified
-                by Myrmidon.</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="Virtual File System"><strong>Virtual File System</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>The VFS needs plenty of work:</p>
-                                <ul>
-                    <li>Move and copy files/folders.</li>
-                    <li>Search through a file hierarchy, using Ant-style wildcards.</li>
-                    <li>Search through a file hierarchy, using a Selector interface.</li>
-                    <li>The in-memory caching mechanism is pretty rudimentary at this stage.
-                    It needs work to make it size capped.  In addition, some mechanism needs
-                    to be provided to release and refresh cached info.
-                    </li>
-                    <li>Capabilities discovery.</li>
-                    <li>Attributes and attribute schema.</li>
-                    <li>File system layering.  That is, the ability for a file system to
-                    sit on top of another file system, or a file from another file system
-                    (e.g. Zip/Jar/Tar file systems, gzip/encoding file systems, virtual file
-                    systems).
-                    </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">
-        <a name="File Data-Types and Tasks"><strong>File Data-Types and Tasks</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>The file data-types, such as <code>&lt;fileset&gt;</code> and
-                <code>&lt;path&gt;</code>, are some of the most widely used parts of Ant 1.x.
-                Unfortunately, they aren't particularly extensible.</p>
-                                <ul>
-                    <li>Redesign the file data-types, replacing them with an interface-based
-                    API, plus a set of implementations.  The API should use the VFS file
-                    <code>FileObject</code>, rather than <code>java.io.File</code>.
-                    This process has started, in the <code>antlib.vfile</code> package.
-                    </li>
-                    <li>File Selectors:
-                    <ul>
-                        <li>Change <code>AbstractNameFileSelector</code> to use Ant 1 style patterns
-                        matches, rather than Globs patterns.</li>
-                        <li>Add 'defaultexcludes' to <code>DefaultFileSet</code>.  Also add a
-                        file selector implementation that matches everything except the default
-                        excludes.</li>
-                        <li>Add a name selector that loads patterns from a file.</li>
-                        <li>Add more selector implementations: size and last-modified comparisons,
-                        checksum comparison, byte-wise content comparison.</li>
-                    </ul></li>
-                    <li>File conditions:
-                    <ul>
-                        <li>Add more condition implementations that perform checks on files.
-                        One that searches a path for a file would be useful.</li>
-                    </ul></li>
-                    <li>File Name Mappers:
-                    <ul>
-                        <li>Change FileNameMapper.mapFileName() to take vfs.FileName objects.</li>
-                        <li>Move the current mapper implementations across to antlib.</li>
-                    </ul></li>
-                    <li>File Sets:
-                    <ul>
-                        <li>Add a file set implementation that provides the union of several
-                        nested file sets (that is, a file set that merges several file sets
-                        together).</li>
-                        <li>Add a file set implementation that filters files that are up-to-date
-                        WRT some other file.  Alternatively, this might be better done as a
-                        file selector.</li>
-                    </ul></li>
-                    <li>Paths:
-                    <ul>
-                        <li>Add path implementations that evaluate to the system classpath,
-                        and the ant runtime classpath.  Or, more generally, combine this with
-                        <code>ClassLoaderManager</code> to evaluate to the classpath of any
-                        'library' (e.g. system classpath, ant runtime, tools.jar,
-                        an antlib, an installed extension, or the system classes of another JVM
-                        for cross-compiling).</li>
-                    </ul></li>
-                    <li>Port across the Ant 1 file filter proposal, once it is complete.</li>
-                    <li>Copy task:
-                    <ul>
-                        <li>Implement 'preservelastmodified', 'overwrite', and 'includeemptydirs'.</li>
-                        <li>Support a file name mapper.</li>
-                        <li>Support file filters.</li>
-                        <li>Detect and handle destination file name collisions.</li>
-                    </ul></li>
-                    <li>Implement the <code>&lt;move&gt;</code>, <code>&lt;delete&gt;</code>,
-                    <code>&lt;touch&gt;</code> and <code>&lt;mkdir&gt;</code> tasks on top
-                    of the VFS and the new file data-types.  Might be some scope for generalising
-                    'touch' and 'mkdir' into a single task.</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">
-        <a name="Command-line and Configuration Files"><strong>Command-line and Configuration Files</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>One of the goals of Ant 2 is to allow the user to easily customise and
-                extend Ant.  The command-line and local configuration files, are two places
-                where this would be done.  Currently, Myrmidon some customisation from the
-                command-line, but does not support configuration files.</p>
-                                <ul>
-
-                    <li>Load configuration from system (from $ANT_HOME) and user (from $HOME)
-                    configuration files.</li>
-
-                    <li>Allow the following via config files:
-                        <ul>
-                            <li>Add (or override) the <code>lib</code> and <code>ext</code> directories.</li>
-                            <li>Enable more than one listener, and configure the listeners from
-                            the conents of the config file.</li>
-                            <li>Import libraries, and set properties.</li>
-                            <li>Execute tasks.</li>
-                            <li>Install and configure runtime services.</li>
-                        </ul>
-                    </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">
-        <a name="Scripting"><strong>Scripting</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Add the ability to extend Ant using languages other than
-                Java:</p>
-                                <ul>
-                    <li>Define a task using a scripting language such as Javascript.</li>
-                    <li>Use Rhino's ability to implement Java interfaces, to
-                    implement and define types, such as FileSelector, or
-                    Condition.</li>
-                    <li>Define a task using template.</li>
-                    <li>Add some lightweight scripting tasks.</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">
-        <a name="Documentation"><strong>Documentation</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Everyone loves writing documentation, and so a goal for Ant 2 is to
-                generate a lot of reference documentation for tasks and other types directly
-                from the source.  Unfortunately, there's still plenty of tutorial material
-                to write.  In particular we need these:</p>
-                                <ul>
-                    <li>User documentation - describing things like the build file format,
-                    how properties work, how to use references, how sub-builds work, how to customise
-                    Myrmidon, and so on.</li>
-
-                    <li>Task writer documentation - describing things like an overview the task API,
-                    how configuration works, task lifecycle, how to assemble an antlib, a catalog
-                    of the runtime services, and so on.</li>
-
-                    <li>Myrmidon developer documentation - a broad outline of the architecture,
-                    how to build, how to test, and so on.  Also, this todo list needs plenty
-                    of filling out.</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">
-        <a name="Miscellaneous"><strong>Miscellaneous</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>A completely unordered list of items, big and small:</p>
-                                <ul>
-                    <li>Search through the code for 'TODO' items and fix them.</li>
-                    <li>Tidy-up CLIMain so that it calls System.exit() with a non-zero exit code,
-                    if the build fails.</li>
-                    <li>Tidy-up the 'build failed' message, so that the stack trace is only
-                    printed out if the log level is verbose/debug.</li>
-                    <li>Allow service factories to be configured from the contents of the
-                    <code>ant-services.xml</code> descriptor.</li>
-                    <li>Route external process stdout and stderr through the logger.</li>
-                    <li>Add verbosity level to ProjectListener LogEvent</li>
-                    <li>Fire ProjectListener events taskFinished(), targetFinished() and
-                    projectFinished() events on build failure, adding indicator methods to
-                    ProjectEvent.</li>
-                    <li>Fire ProjectListener events projectStarted() and projectFinished()
-                    events on start and finish of referenced projects, adding indicator methods
-                    to ProjectEvent.</li>
-                    <li>Convert PropertyUtil to a non-static PropertyResolver service.</li>
-                    <li>Validate project and target names in DefaultProjectBuilder - reject dodgy
-                    names like "," or "", or "  ".  Probably want to exclude names that start or
-                    end with white-space (though internal whitespace is probably fine).  We also
-                    want to reserve certain punctuation characters like . , : ? [ ] { }, etc for
-                    future use.</li>
-                    <li>Similarly, validate property names, using the same rules.</li>
-                    <li>Detect duplicate type names.</li>
-                    <li>Add fully qualified type names, based on antlib name and type shorthand name.
-                    Allow these to be used in build files in addition to the shorthand names.</li>
-                    <li>Move the <code>&lt;http&gt;</code> and <code>&lt;socket&gt;</code>
-                    conditions to an antlib.  Need to resolve how these will be passed a logger.</li>
-                    <li>Make the <code>&lt;uptodate&gt;</code> task a condition, and move to
-                    an antlib.</li>
-                    <li>Split up <code>&lt;is-set&gt;</code> condition into is-set and is-true conditions.</li>
-                    <li>Allow the <code>&lt;if&gt;</code> task to take any condition implementation.</li>
-                    <li>Unit tests.</li>
-                </ul>
-                    </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/proposal/myrmidon/docs/user.html b/proposal/myrmidon/docs/user.html
deleted file mode 100644
index db73fe9..0000000
--- a/proposal/myrmidon/docs/user.html
+++ /dev/null
@@ -1,300 +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="Adam Murdoch">
-  <meta name="email" value="adammurdoch@apache.org">
-        
-      <title>Apache Myrmidon - User Guide</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-          <td>      <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>
-  </td>
-          <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></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>Myrmidon</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Introduction</a>
-  </li>
-          <li>      <a href="./getinvolved.html">Get Involved</a>
-  </li>
-          <li>      <a href="./user.html">Building Myrmidon</a>
-  </li>
-          <li>      <a href="./todo.html">Todo List</a>
-  </li>
-        </ul>
-      <p><strong>User Guide</strong></p>
-    <ul>
-          <li>      <a href="./buildfile.html">Build file</a>
-  </li>
-          <li>      <a href="./vfs.html">Virtual File System</a>
-  </li>
-        </ul>
-      <p><strong>Extending Ant</strong></p>
-    <ul>
-          <li>      <a href="./task.html">Task Writers HOWTO</a>
-  </li>
-          <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
-  </li>
-          <li>      <a href="./librarys.html">Library HOWTO</a>
-  </li>
-        </ul>
-      <p><strong>Container Design</strong></p>
-    <ul>
-        </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="Building Myrmidon"><strong>Building Myrmidon</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-First, you will need to fetch the Myrmidon source from CVS.  The source
-can be source in the <code>proposal/myrmidon</code> directory of the
-Ant source tree.  You should check out the <code>jakarta-ant</code> CVS
-module, as described
-<a href="http://jakarta.apache.org/site/cvsindex.html">here</a>.
-</p>
-                                <p>
-To build Myrmidon, use the <code>build.xml</code> build script.  You will need
-to use Ant 1.4.1 or later.  The default target builds the Myrmidon distribution
-into the <code>dist</code> directory.  The distribution is a ready-to-run
-installation of Myrmidon.
-</p>
-                                <p>There are a number features that are not built unless the appropriate optional Jar
-files are found in the <code>lib</code> directory:</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Feature
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Jar File
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Download From
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          SMB VFS support (Samba, Windows shares)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          jcifs.jar
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://jcifs.samba.org">jcifs.samba.org</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          FTP VFS support
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          netcomponents.jar
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.savarese.org/oro/software/NetComponents.html">www.savarese.org</a>
-        </font>
-  </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="Running Myrmidon"><strong>Running Myrmidon</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-To run Myrmidon, use one of the following methods:
-</p>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Launcher Script"><strong>Launcher Script</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-On Windows and Unix platforms, you can use the <code>ant</code> script
-in the distribution's <code>bin</code> directory.  The following environment
-variables can be used, but are not required (except on Windows 9x - see below).
-</p>
-                                <p>
-
-</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Variable
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Description
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          JAVA_HOME
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The directory that the JDK is installed in.
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          JAVACMD
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The command to use to start the JVM.  Defaults to <code>java</code>.
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          ANT_HOME
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          
-            The directory containing the Myrmidon distribution.  This must be
-            set when running on Windows 95, 98 or Me.
-        
-        </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="Executable Jar File"><strong>Executable Jar File</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-The Myrmidon distribution includes an executable Jar file, which can be used
-to run Myrmidon.  Use the following command:
-</p>
-                                <pre>
-prompt&gt; <i>java</i> -jar <i>ant-home</i>/bin/myrmidon-launcher.jar <i>options</i>
-</pre>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                <p>When started, Myrmidon looks for a project file called <code>build.ant</code>
-in the current directory.  A different project file can be specified using the
-<code>-f</code> command-line option.  Myrmidon executes the targets given on
-the command-line, or the default target if none is given.  For example, the
-following executes the targets <code>clean</code> and <code>build</code> from
-the project file <code>my-project.xml</code>:</p>
-                                <pre>
-prompt&gt; ant -f my-project.xml clean build
-</pre>
-                                <p>
-Run Myrmidon with the <code>-h</code> command-line option for a list of
-the command-line options that are available.
-</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/myrmidon/docs/vfs.html b/proposal/myrmidon/docs/vfs.html
deleted file mode 100644
index 53cd876..0000000
--- a/proposal/myrmidon/docs/vfs.html
+++ /dev/null
@@ -1,421 +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="Adam Murdoch">
-  <meta name="email" value="adammurdoch@apache.org">
-        
-      <title>Apache Myrmidon - VFS User Guide</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-          <td>      <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>
-  </td>
-          <td valign="bottom"><div align="right"><b><font size="+3" color="#525D76">Apache Myrmidon</font></b></div></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>Myrmidon</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Introduction</a>
-  </li>
-          <li>      <a href="./getinvolved.html">Get Involved</a>
-  </li>
-          <li>      <a href="./user.html">Building Myrmidon</a>
-  </li>
-          <li>      <a href="./todo.html">Todo List</a>
-  </li>
-        </ul>
-      <p><strong>User Guide</strong></p>
-    <ul>
-          <li>      <a href="./buildfile.html">Build file</a>
-  </li>
-          <li>      <a href="./vfs.html">Virtual File System</a>
-  </li>
-        </ul>
-      <p><strong>Extending Ant</strong></p>
-    <ul>
-          <li>      <a href="./task.html">Task Writers HOWTO</a>
-  </li>
-          <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
-  </li>
-          <li>      <a href="./librarys.html">Library HOWTO</a>
-  </li>
-        </ul>
-      <p><strong>Container Design</strong></p>
-    <ul>
-        </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="Handling Files"><strong>Handling Files</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Myrmidon includes a Virtual File System (VFS), which allows files from
-            different sources to be treated identically.  The VFS currently supports
-            the following file types:</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          File System
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Description
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL Format
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Local Files
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Files on the local file system.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Three different formats are currently supported for local file names:
-                        <ul>
-                            <li><code>file://</code> <i>absolute-file-name</i></li>
-                            <li>Absolute file names</li>
-                            <li>Relative file names.  These are resolved relative to the
-                            project's base directory.
-                            </li>
-                        </ul>
-                    
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Zip Files
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The contents of Zip files (and Jar, War, and Ear files).
-                    Currently, the VFS supports read-only access to Zip file contents,
-                    and only for local Zip files.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <code>zip://</code> <i>zip-file-path</i> [<code>!</code><i>absolute-path</i>]
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          FTP
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Files on an FTP server.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <code>ftp://</code> [[<i>password</i><code>:</code>] <i>username</i><code>@</code>] <i>hostname</i> [<code>:</code><i>port</i>] [<i>absolute-path</i>]
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          SMB
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Files on a CFIS server, such as Samba or Windows shares.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <code>smb://</code> [[<i>password</i><code>:</code>] <i>username</i><code>@</code>] <i>hostname</i> [<code>:</code><i>port</i>] [<i>absolute-path</i>]
-        </font>
-  </td>
-      </tr>
-        </table>
-                                <p>Here are some example URLs:</p>
-                                <ul>
-                <li><code>build/classes</code></li>
-                <li><code>c:\program files\ant\bin</code></li>
-                <li><code>file://C:/program files/ant</code></li>
-                <li><code>zip://build/lib/ant.jar!/org/apache/tools</code></li>
-                <li><code>ftp://adam@somehost/pub/downloads</code></li>
-                <li><code>smb://password:adam@somehost/home/adam</code></li>
-            </ul>
-                                <p>Currently, there are only a handful of VFS aware tasks.  This will grow
-            as more tasks are ported to the new API, and data types.</p>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="File Sets"><strong>File Sets</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>A file set in Myrmidon is more general than Ant 1's concept of a file set.
-                Firstly, there is more than one type of file set.  Secondly, they are VFS enabled.
-                File sets are automatically converted to a <a href="#Paths">path</a>, and so
-                can be used anywhere that a path can.</p>
-                                <h3><code>&lt;v-fileset&gt;</code></h3>
-                                <p>This is the equivalent of Ant 1's <code>&lt;fileset&gt;</code> (The name
-                is temporary, it will be changed to <code>&lt;fileset&gt;</code> once more
-                porting work as been completed).</p>
-                                <p>Rather than use a set of include and exclude patterns to choose the files
-                that make up the file set, <code>&lt;v-fileset&gt;</code> takes zero or more
-                <a href="#File Selectors">file selectors</a>.  File selectors can be used to
-                select files based on any attribute of the file, rather than just the name.
-                You can use <code>&lt;name&gt;</code> selectors to achieve the same result
-                as using includes or excludes.</p>
-                                <p>A <code>&lt;v-fileset&gt;</code> element takes the following attributes:</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Attribute
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Description
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Default Value
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          dir
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The base directory for the file set.  This can be any URL that the
-                        VFS supports.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Required
-        </font>
-  </td>
-      </tr>
-        </table>
-                                <p>A <code>&lt;v-fileset&gt;</code> element takes any number of nested
-                <a href="#File Selectors">file selector</a> elements.  To be included in the
-                file set, a file must be selected by all the file selectors.  That is, the
-                file selectors are implicitly AND-ed together.  If no file selector is provided,
-                all the files and directories are included in the set.</p>
-                                <p>An 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>
-
-&lt;v-fileset dir=&quot;src&quot;&gt;
-    &lt;name pattern=&quot;org/apache/tools/ant/**&quot;/&gt;
-    &lt;is-file/&gt;
-&lt;/v-fileset&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>
-                                <h3><code>&lt;flat-fileset&gt;</code></h3>
-                                <p>This file set takes a set of nested file sets and paths, and flattens them
-                into a single directory.  It can be used as a way of converting a path into a
-                file set.  It can also be used as a replacement for the <code>flatten</code>
-                attribute for the copy and move tasks.</p>
-                                <p>A <code>&lt;flat-fileset&gt;</code> element takes no attributes, and a set
-                of nested paths or file sets.</p>
-                                <p>An 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>
-
-&lt;v-copy todir=&quot;dist/lib&quot;&gt;
-  &lt;flat-fileset&gt;
-    &lt;v-fileset dir=&quot;build/lib&quot;&gt;
-      &lt;basename pattern=&quot;*.jar&quot;/&gt;
-    &lt;v-fileset&gt;
-    &lt;v-path path=&quot;${classpath}&quot;/&gt;
-  &lt;/flat-fileset&gt;
-&lt;/v-copy&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>
-                                <h3><code>&lt;mapped-fileset&gt;</code></h3>
-                                <p>A fileset that applies a <a href="buildfile.html#File Name Mappers">file name mapper</a>
-                    to a nested fileset.
-                </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="Paths"><strong>Paths</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Paths are an ordered list of files.</p>
-                                <h3><code>&lt;v-path&gt;</code></h3>
-                                <p>This is the equivalent of Ant 1's <code>&lt;path&gt;</code>.</p>
-                                <h3><code>&lt;filtered-path&gt;</code></h3>
-                                <p>A path that applies file selectors to a set of nested file sets and paths.</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="File Selectors"><strong>File Selectors</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>File selectors are used to select files from file sets and paths.</p>
-                                <h3><code>&lt;and&gt;</code></h3>
-                                <p>Combines zero or more file selectors, using AND. An empty <code>&lt;and&gt;</code>
-                selector accepts all files.</p>
-                                <h3><code>&lt;basename&gt;</code></h3>
-                                <p>Selects files whose base name matches an Ant 1 style pattern, or a regular
-                expression.</p>
-                                <h3><code>&lt;condition&gt;</code></h3>
-                                <p>Takes a set of <a href="buildfile.html#Conditions">conditions</a>.  If
-                the conditions evaluate to true, then select every file.  Otherwise,
-                select no files.</p>
-                                <h3><code>&lt;exists&gt;</code></h3>
-                                <p>Selects files that exist.</p>
-                                <h3><code>&lt;is-empty-folder&gt;</code></h3>
-                                <p>Selects empty folders, that is, folders that have no children.</p>
-                                <h3><code>&lt;is-folder&gt;</code></h3>
-                                <p>Selects folders, does not select regular files.</p>
-                                <h3><code>&lt;is-file&gt;</code></h3>
-                                <p>Selects regular files, does not select folders.</p>
-                                <h3><code>&lt;name&gt;</code></h3>
-                                <p>Selects files whose path in a file set matches an Ant 1 style pattern, or
-                a regular expression.</p>
-                                <h3><code>&lt;not&gt;</code></h3>
-                                <p>Selects files that are not selected by a nested file selector.</p>
-                                <h3><code>&lt;or&gt;</code></h3>
-                                <p>Combines zero or more file selectors, using OR. An empty <code>&lt;or&gt;</code>
-                selector accepts all files.</p>
-                                <h3><code>&lt;url&gt;</code></h3>
-                                <p>Selects files whose URL matches an Ant 1 style pattern, or a regular expression.</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/proposal/myrmidon/etc/testcases/org/apache/antlib/core/if.ant b/proposal/myrmidon/etc/testcases/org/apache/antlib/core/if.ant
deleted file mode 100644
index b3caca2..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/antlib/core/if.ant
+++ /dev/null
@@ -1,63 +0,0 @@
-<project version="2.0">
-    <target name="true-prop">
-        <property name="test-prop" value="true"/>
-        <if test="test-prop">
-            <log>test-prop is set</log>
-        </if>
-        <if not-test="test-prop">
-            <log>test-prop is not set</log>
-        </if>
-    </target>
-
-    <target name="set-prop">
-        <property name="test-prop" value="some value"/>
-        <if test="test-prop">
-            <log>test-prop is set</log>
-        </if>
-        <if not-test="test-prop">
-            <log>test-prop is not set</log>
-        </if>
-    </target>
-
-    <target name="not-set-prop">
-        <if test="test-prop">
-            <log>test-prop is set</log>
-        </if>
-        <if not-test="test-prop">
-            <log>test-prop is not set</log>
-        </if>
-    </target>
-
-    <target name="false-prop">
-        <property name="test-prop" value="false"/>
-        <if test="test-prop">
-            <log>test-prop is set</log>
-        </if>
-        <if not-test="test-prop">
-            <log>test-prop is not set</log>
-        </if>
-    </target>
-
-    <target name="multiple-nested-tasks">
-        <property name="test-prop" value="true"/>
-        <if test="test-prop">
-            <log>task 1</log>
-            <log>task 2</log>
-            <log>task 3</log>
-            <log>task 4</log>
-        </if>
-    </target>
-
-    <target name="no-condition">
-        <if>
-            <log>no go</log>
-        </if>
-    </target>
-
-    <target name="too-many-conditions">
-        <if test="test-prop" not-test="test-prop">
-            <log>no go</log>
-        </if>
-    </target>
-
-</project>
\ No newline at end of file
diff --git a/proposal/myrmidon/etc/testcases/org/apache/antlib/core/property.ant b/proposal/myrmidon/etc/testcases/org/apache/antlib/core/property.ant
deleted file mode 100644
index 69219bc..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/antlib/core/property.ant
+++ /dev/null
@@ -1,44 +0,0 @@
-<project version="2.0">
-
-    <!-- Test setting property via attribute -->
-    <target name="set-attr">
-        <property name="test-prop" value="some value"/>
-        <log>test-prop = [${test-prop}]</log>
-    </target>
-
-    <!-- Test setting property via content -->
-    <target name="set-content">
-        <property name="test-prop2">some value</property>
-        <log>test-prop2 = [${test-prop2}]</log>
-    </target>
-
-    <!-- Test setting property via a nested element -->
-    <target name="set-element">
-        <property name="test-prop3">
-            <property-test-type value="some value"/>
-        </property>
-        <log>test-prop3 = [${test-prop3}]</log>
-    </target>
-
-    <!-- Test missing property name -->
-    <target name="missing-name">
-        <property value="some value"/>
-    </target>
-
-    <!-- Test missing property value -->
-    <target name="missing-value">
-        <property name="some-prop"/>
-    </target>
-
-    <!-- Test setting the value more than once -->
-    <target name="too-many-values1">
-        <property name="some-prop" value="some value">another value</property>
-    </target>
-
-    <!-- Test setting the value more than once -->
-    <target name="too-many-values2">
-        <property name="some-prop" value="some value">
-            <property-test-type value="value 2"/>
-        </property>
-    </target>
-</project>
diff --git a/proposal/myrmidon/etc/testcases/org/apache/antlib/vfile/copy.ant b/proposal/myrmidon/etc/testcases/org/apache/antlib/vfile/copy.ant
deleted file mode 100644
index 8b68c70..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/antlib/vfile/copy.ant
+++ /dev/null
@@ -1,8 +0,0 @@
-<project version="2.0">
-    <target name="copy">
-        <v-fileset id="src-files" dir="src"/>
-        <v-copy todir="dest">
-            <v-fileset-ref id="src-files"/>
-        </v-copy>
-    </target>
-</project>
diff --git a/proposal/myrmidon/etc/testcases/org/apache/antlib/vfile/src/emptyFile.txt b/proposal/myrmidon/etc/testcases/org/apache/antlib/vfile/src/emptyFile.txt
deleted file mode 100644
index e69de29..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/antlib/vfile/src/emptyFile.txt
+++ /dev/null
diff --git a/proposal/myrmidon/etc/testcases/org/apache/antlib/vfile/src/file1.txt b/proposal/myrmidon/etc/testcases/org/apache/antlib/vfile/src/file1.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/antlib/vfile/src/file1.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/proposal/myrmidon/etc/testcases/org/apache/antlib/vfile/src/subdir1/someFile.html b/proposal/myrmidon/etc/testcases/org/apache/antlib/vfile/src/subdir1/someFile.html
deleted file mode 100644
index c769030..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/antlib/vfile/src/subdir1/someFile.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-<body>
-<p>Yo!</p>
-</body>
-</html>
diff --git a/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/dir1/file1.txt b/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/dir1/file1.txt
deleted file mode 100644
index e69de29..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/dir1/file1.txt
+++ /dev/null
diff --git a/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/dir1/file2.txt b/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/dir1/file2.txt
deleted file mode 100644
index e69de29..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/dir1/file2.txt
+++ /dev/null
diff --git a/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/dir1/file3.txt b/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/dir1/file3.txt
deleted file mode 100644
index e69de29..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/dir1/file3.txt
+++ /dev/null
diff --git a/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/empty.txt b/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/empty.txt
deleted file mode 100644
index e69de29..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/empty.txt
+++ /dev/null
diff --git a/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/file1.txt b/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/file1.txt
deleted file mode 100644
index e7dead2..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/aut/vfs/basedir/file1.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This is a test file.
-With 2 lines in it.
diff --git a/proposal/myrmidon/etc/testcases/org/apache/myrmidon/components/deployer/ant-descriptor.xml b/proposal/myrmidon/etc/testcases/org/apache/myrmidon/components/deployer/ant-descriptor.xml
deleted file mode 100644
index 1f21fc7..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/myrmidon/components/deployer/ant-descriptor.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<ant-lib version="1.0">
-
-    <types>
-        <!-- Register a data-type -->
-        <data-type name="test-type1"
-                   classname="org.apache.myrmidon.components.deployer.TestType1"/>
-
-        <!-- Register a custom role implementation -->
-        <test-role1 name="test-type1"
-                    classname="org.apache.myrmidon.components.deployer.TestType1"/>
-
-        <!-- Register a converter -->
-        <converter classname="org.apache.myrmidon.components.deployer.TestConverter1"
-                   source="java.lang.String"
-                   destination="org.apache.myrmidon.components.deployer.TestType1"/>
-    </types>
-
-</ant-lib>
diff --git a/proposal/myrmidon/etc/testcases/org/apache/myrmidon/components/deployer/ant-roles.xml b/proposal/myrmidon/etc/testcases/org/apache/myrmidon/components/deployer/ant-roles.xml
deleted file mode 100644
index 1178a35..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/myrmidon/components/deployer/ant-roles.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<roles version="1.0">
-    <!-- A custom role -->
-    <role shorthand="test-role1" name="org.apache.myrmidon.components.deployer.TestRole1"/>
-</roles>
diff --git a/proposal/myrmidon/etc/testcases/org/apache/myrmidon/components/embeddor/project-builder.ant b/proposal/myrmidon/etc/testcases/org/apache/myrmidon/components/embeddor/project-builder.ant
deleted file mode 100644
index 7f52d27..0000000
--- a/proposal/myrmidon/etc/testcases/org/apache/myrmidon/components/embeddor/project-builder.ant
+++ /dev/null
@@ -1,6 +0,0 @@
-<project version="2.0" name="test-project" default="main-target">
-    <property name="some-prop" value="some-value"/>
-    <target name="main-target">
-        <log>A log message</log>
-    </target>
-</project>
\ No newline at end of file
diff --git a/proposal/myrmidon/lib/LICENSE.jdepend.txt b/proposal/myrmidon/lib/LICENSE.jdepend.txt
deleted file mode 100644
index 50b326d..0000000
--- a/proposal/myrmidon/lib/LICENSE.jdepend.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-Copyright (C) 2001 Clarkware Consulting, Inc.
-All Rights Reserved.
-
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions 
-are met:
-
-   1. Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-
-   2. Redistributions in binary form must reproduce the above copyright 
-      notice, this list of conditions and the following disclaimer in the 
-      documentation and/or other materials provided with the distribution.
-
-   3. Neither the name of Clarkware Consulting, Inc. nor the names of its 
-      contributors may be used to endorse or promote products derived 
-      from this software without prior written permission. For written 
-      permission, please contact clarkware@clarkware.com.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
-CLARKWARE CONSULTING OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
-OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
-NEGLIGENCE OR OTHERWISE) ARISING IN  ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/proposal/myrmidon/lib/LICENSE.xdoclet.txt b/proposal/myrmidon/lib/LICENSE.xdoclet.txt
deleted file mode 100644
index da1589e..0000000
--- a/proposal/myrmidon/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/myrmidon/lib/avalon-excalibur-20020202.jar b/proposal/myrmidon/lib/avalon-excalibur-20020202.jar
deleted file mode 100644
index 599e134..0000000
--- a/proposal/myrmidon/lib/avalon-excalibur-20020202.jar
+++ /dev/null
Binary files differ
diff --git a/proposal/myrmidon/lib/avalon-framework-01032002.jar b/proposal/myrmidon/lib/avalon-framework-01032002.jar
deleted file mode 100644
index 6eea967..0000000
--- a/proposal/myrmidon/lib/avalon-framework-01032002.jar
+++ /dev/null
Binary files differ
diff --git a/proposal/myrmidon/lib/avalon-scratchpad-20020120.jar b/proposal/myrmidon/lib/avalon-scratchpad-20020120.jar
deleted file mode 100644
index 01be337..0000000
--- a/proposal/myrmidon/lib/avalon-scratchpad-20020120.jar
+++ /dev/null
Binary files differ
diff --git a/proposal/myrmidon/lib/jakarta-oro-2.0.5.jar b/proposal/myrmidon/lib/jakarta-oro-2.0.5.jar
deleted file mode 100644
index 6eafa4a..0000000
--- a/proposal/myrmidon/lib/jakarta-oro-2.0.5.jar
+++ /dev/null
Binary files differ
diff --git a/proposal/myrmidon/lib/log4j-core.jar b/proposal/myrmidon/lib/log4j-core.jar
deleted file mode 100644
index da6d8c2..0000000
--- a/proposal/myrmidon/lib/log4j-core.jar
+++ /dev/null
Binary files differ
diff --git a/proposal/myrmidon/lib/logkit-1.0.jar b/proposal/myrmidon/lib/logkit-1.0.jar
deleted file mode 100644
index 8b1d2c1..0000000
--- a/proposal/myrmidon/lib/logkit-1.0.jar
+++ /dev/null
Binary files differ
diff --git a/proposal/myrmidon/project.properties.sample b/proposal/myrmidon/project.properties.sample
deleted file mode 100644
index 91914ea..0000000
--- a/proposal/myrmidon/project.properties.sample
+++ /dev/null
@@ -1,15 +0,0 @@
-project.dir=.
-project.url=http://jakarta.apache.org/ant/myrmidon
-
-## Should be passed in
-## project.class.path=
-
-project.src.path=src/java:src/main
-
-#Specify mail properties
-mail.from=
-mail.to=
-mail.host=
-
-#Specify location of QA tool
-metamata.home=D:/QAnalyzer
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/ProjectHelper.java b/proposal/sandbox/embed/ProjectHelper.java
deleted file mode 100644
index 92eec91..0000000
--- a/proposal/sandbox/embed/ProjectHelper.java
+++ /dev/null
@@ -1,485 +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.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 java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import org.xml.sax.AttributeList;
-import org.apache.tools.ant.helper.ProjectHelperImpl;
-
-/**
- * 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 {
-
-    /**
-     * 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);
-    }
-
-    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());
-    }
-
-    /* -------------------- Helper discovery -------------------- */
-    public static final String HELPER_PROPERTY =
-        "org.apache.tools.ant.ProjectHelper";
-    
-    public static final String SERVICE_ID =
-        "/META-INF/services/org.apache.tools.ant.ProjectHelper";
-
-    
-    /** Discover a project helper instance. Uses the same patterns
-     *  as JAXP, commons-logging, etc: a system property, a JDK1.3
-     *  service discovery, default.
-     */
-    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
-        try {
-            String helperClass = System.getProperty(HELPER_PROPERTY);
-            if (helperClass != null) {
-                helper = newHelper(helperClass);
-            }
-        } catch (SecurityException e) {
-            // It's ok, we'll try next option
-            ;
-        }
-
-        // 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
-                    BufferedReader rd;
-                    try {
-                        rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
-                    } catch (java.io.UnsupportedEncodingException e) {
-                        rd = new BufferedReader(new InputStreamReader(is));
-                    }
-                    
-                    String helperClassName = rd.readLine();
-                    rd.close();
-                    
-                    if (helperClassName != null &&
-                        ! "".equals(helperClassName)) {
-                        
-                        helper= newHelper( helperClassName );
-                    }
-                }
-            } catch( Exception ex ) {
-                ;
-            }
-        }
-
-        // Default
-        return new ProjectHelperImpl();
-    }
-
-    /** Create a new helper. It'll first try the thread class loader,
-     *  then Class.forName() will load from the same loader that
-     *  loaded this class.
-     */
-    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.
-     */
-    public static ClassLoader getContextClassLoader()
-        throws BuildException
-    {
-        // Are we running on a JDK 1.2 or later system?
-        Method method = null;
-        try {
-            method = Thread.class.getMethod("getContextClassLoader", null);
-        } catch (NoSuchMethodException e) {
-            // we are running on JDK 1.1
-            return null; 
-        }
-
-        // Get the thread context class loader (if there is one)
-        ClassLoader classLoader = null;
-        try {
-            classLoader = (ClassLoader)
-                method.invoke(Thread.currentThread(), null);
-        } catch (IllegalAccessException e) {
-            throw new BuildException
-                ("Unexpected IllegalAccessException", e);
-        } catch (InvocationTargetException e) {
-            throw new BuildException
-                ("Unexpected InvocationTargetException", e);
-        }
-
-        // Return the selected class loader
-        return (classLoader);
-    }
-
-    // -------------------- 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 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;
-        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));
-        }
-    }
-}
diff --git a/proposal/sandbox/embed/ProjectHelperImpl.java b/proposal/sandbox/embed/ProjectHelperImpl.java
deleted file mode 100644
index 221a5a3..0000000
--- a/proposal/sandbox/embed/ProjectHelperImpl.java
+++ /dev/null
@@ -1,1150 +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 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 org.xml.sax.helpers.XMLReaderAdapter;
-
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.ParserConfigurationException;
-
-/**
- * Original helper.
- *
- * @author duncan@x180.com
- */
-public class ProjectHelperImpl extends ProjectHelper {
-
-    /** 
-     * Parser factory to use to create parsers.
-     * @see #getParserFactory
-     */
-    private static SAXParserFactory parserFactory = null;
-
-    /**
-     * 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.
-     * 
-     * @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 {
-            SAXParser saxParser = getParserFactory().newSAXParser();
-            try {
-                parser = saxParser.getParser();
-            } catch (SAXException exc) {
-                parser = new XMLReaderAdapter(saxParser.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();
-            parser.setDocumentHandler(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(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.
-     */
-    private class AbstractHandler extends HandlerBase {
-        
-        /** 
-         * Previous handler for the document. 
-         * When the next element is finished, control returns
-         * to this handler.
-         */
-        protected DocumentHandler parentHandler;
-        
-        /**
-         * Creates a handler and sets the parser to use it
-         * for the current element.
-         * 
-         * @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(DocumentHandler parentHandler) {
-            this.parentHandler = parentHandler;
-
-            // Start handling SAX events
-            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 + "\"", 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 + "\"", 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
-            parser.setDocumentHandler(parentHandler);
-        }
-    }
-
-    /**
-     * Handler for the root element. Its only child must be the "project" element.
-     */
-    private class RootHandler extends HandlerBase {
-
-        /**
-         * 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) {
-        
-            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;
-        }
-
-        /**
-         * 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(this).init(tag, attrs);
-            } else {
-                throw new SAXParseException("Config file is not of expected XML type", 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) {
-            ProjectHelperImpl.this.locator = locator;
-        }
-    }
-
-    /**
-     * Handler for the top level "project" element.
-     */
-    private 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(DocumentHandler parentHandler) {
-            super(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) + "\"", 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));
-                    }
-                }
-            }
-
-        }
-
-        /**
-         * 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 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 (project.getDataTypeDefinitions().get(name) != null) {
-                handleDataType(name, attrs);
-            } else {
-                throw new SAXParseException("Unexpected element \"" + name + "\"", locator);
-            }
-        }
-        
-        /**
-         * Handles a task defintion element by creating a task 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 when initialising 
-         *                              the task handler
-         *                          
-         */
-        private void handleTaskdef(String name, AttributeList attrs) throws SAXParseException {
-            (new TaskHandler(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 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 handleTypedef(String name, AttributeList attrs) throws SAXParseException {
-            (new TaskHandler(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 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 handleProperty(String name, AttributeList attrs) throws SAXParseException {
-            (new TaskHandler(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(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 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 handleDataType(String name, AttributeList attrs) throws SAXParseException {
-            new DataTypeHandler(this).init(name, attrs);
-        }
-
-    }
-
-    /**
-     * Handler for "target" elements.
-     */
-    private 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(DocumentHandler parentHandler) {
-            super(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 + "\"", 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);
-            }
-        }
-
-        /**
-         * 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 void startElement(String name, AttributeList attrs) throws SAXParseException {
-            if (project.getDataTypeDefinitions().get(name) != null) {
-                new DataTypeHandler(this, target).init(name, attrs);
-            } else {
-                new TaskHandler(this, target, null, target).init(name, attrs);
-            }
-        }
-    }
-
-    /**
-     * Handler for all task elements.
-     */
-    private 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(DocumentHandler parentHandler, TaskContainer container, RuntimeConfigurable parentWrapper, Target target) {
-            super(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 = 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(project);
-                //XXX task.setTaskType(tag);
-                task.setTaskName(tag);
-            }
-
-            task.setLocation(new Location(buildFile.toString(), locator.getLineNumber(), locator.getColumnNumber()));
-            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, 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 {
-                    addText(project, task, buf, start, count);
-                } catch (BuildException exc) {
-                    throw new SAXParseException(exc.getMessage(), 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 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 {
-        /** 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(DocumentHandler parentHandler, 
-                                    Object parent,
-                                    RuntimeConfigurable parentWrapper,
-                                    Target target) {
-            super(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 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 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);
-                    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);
-            }
-        }
-
-        /**
-         * 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 {
-                    addText(project, child, buf, start, count);
-                } catch (BuildException exc) {
-                    throw new SAXParseException(exc.getMessage(), 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 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 for all data types directly subordinate to project or target.
-     */
-    private 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(DocumentHandler parentHandler) {
-            this(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(DocumentHandler parentHandler, Target target) {
-            super(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 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 init(String propType, AttributeList attrs) throws SAXParseException {
-            try {
-                element = 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, project);
-                    configureId(element, attrs);
-                }
-            } catch (BuildException exc) {
-                throw new SAXParseException(exc.getMessage(), 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 {
-                addText(project, element, buf, start, count);
-            } catch (BuildException exc) {
-                throw new SAXParseException(exc.getMessage(), 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 void startElement(String name, AttributeList attrs) throws SAXParseException {
-            new NestedElementHandler(this, element, wrapper, target).init(name, attrs);
-        }
-    }
-
-    /**
-     * Returns the parser factory to use. Only one parser
-     * factory is ever created by this method (multi-threading 
-     * issues aside) and is then cached for future use.
-     * 
-     * @return a SAXParserFactory to use within this class
-     */
-    private static SAXParserFactory getParserFactory() {
-        if (parserFactory == null) {
-            parserFactory = SAXParserFactory.newInstance();
-        }
-
-        return parserFactory;
-    }
-
-    /**
-     * 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/proposal/sandbox/embed/ProjectHelperImpl2.java b/proposal/sandbox/embed/ProjectHelperImpl2.java
deleted file mode 100644
index 747856a..0000000
--- a/proposal/sandbox/embed/ProjectHelperImpl2.java
+++ /dev/null
@@ -1,1163 +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 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.AttributeList;
-import org.xml.sax.helpers.XMLReaderAdapter;
-import org.xml.sax.helpers.DefaultHandler;
-
-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 {
-
-    /** 
-     * Parser factory to use to create parsers.
-     * @see #getParserFactory
-     */
-    private static SAXParserFactory parserFactory = null;
-
-    /**
-     * SAX 2 style parser used to parse the given file. 
-     */
-    //    private org.xml.sax.Parser parser;
-    private org.xml.sax.XMLReader 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.
-     * 
-     * @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 {
-            SAXParser saxParser = getParserFactory().newSAXParser();
-            parser =saxParser.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);
-            DefaultHandler hb = new RootHandler();
-            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(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.
-     */
-    private class AbstractHandler extends DefaultHandler {
-        
-        /** 
-         * Previous handler for the document. 
-         * When the next element is finished, control returns
-         * to this handler.
-         */
-        protected DefaultHandler parentHandler;
-        
-        /**
-         * Creates a handler and sets the parser to use it
-         * for the current element.
-         * 
-         * @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(DefaultHandler parentHandler) {
-            this.parentHandler = parentHandler;
-
-            // Start handling SAX events
-            parser.setContentHandler(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 uri, String tag, String qname,
-                                 AttributeList attrs)
-            throws SAXParseException
-        {
-            throw new SAXParseException("Unexpected element \"" + tag + "\"", 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 + "\"", 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 uri, String name, String qName) throws SAXException {
-
-            finished();
-            // Let parent resume handling SAX events
-            parser.setContentHandler(parentHandler);
-        }
-    }
-
-    /**
-     * Handler for the root element. Its only child must be the "project" element.
-     */
-    private class RootHandler extends DefaultHandler {
-
-        /**
-         * 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) {
-        
-            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;
-        }
-
-        /**
-         * 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, 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);
-            }
-        }
-
-        /**
-         * 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) {
-            ProjectHelperImpl2.this.locator = locator;
-        }
-    }
-
-    /**
-     * Handler for the top level "project" element.
-     */
-    private 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(DefaultHandler parentHandler) {
-            super(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) + "\"", 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));
-                    }
-                }
-            }
-
-        }
-
-        /**
-         * 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 void startElement(String uri, String name, String qname, 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 (project.getDataTypeDefinitions().get(name) != null) {
-                handleDataType(name, attrs);
-            } else {
-                throw new SAXParseException("Unexpected element \"" + name + "\"", locator);
-            }
-        }
-        
-        /**
-         * Handles a task defintion element by creating a task 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 when initialising 
-         *                              the task handler
-         *                          
-         */
-        private void handleTaskdef(String name, AttributeList attrs) throws SAXParseException {
-            (new TaskHandler(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 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 handleTypedef(String name, AttributeList attrs) throws SAXParseException {
-            (new TaskHandler(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 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 handleProperty(String name, AttributeList attrs) throws SAXParseException {
-            (new TaskHandler(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(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 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 handleDataType(String name, AttributeList attrs) throws SAXParseException {
-            new DataTypeHandler(this).init(name, attrs);
-        }
-
-    }
-
-    /**
-     * Handler for "target" elements.
-     */
-    private 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(DefaultHandler parentHandler) {
-            super(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 + "\"", 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);
-            }
-        }
-
-        /**
-         * 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 void startElement(String uri, String name, String qname, AttributeList attrs)
-            throws SAXParseException
-        {
-            if (project.getDataTypeDefinitions().get(name) != null) {
-                new DataTypeHandler(this, target).init(name, attrs);
-            } else {
-                new TaskHandler(this, target, null, target).init(name, attrs);
-            }
-        }
-    }
-
-    /**
-     * Handler for all task elements.
-     */
-    private 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(DefaultHandler parentHandler, TaskContainer container, RuntimeConfigurable parentWrapper, Target target) {
-            super(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 = 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(project);
-                //XXX task.setTaskType(tag);
-                task.setTaskName(tag);
-            }
-
-            task.setLocation(new Location(buildFile.toString(), locator.getLineNumber(), locator.getColumnNumber()));
-            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, 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 {
-                    addText(project, task, buf, start, count);
-                } catch (BuildException exc) {
-                    throw new SAXParseException(exc.getMessage(), 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 void startElement(String uri, String name, String qname, 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 {
-        /** 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(DefaultHandler parentHandler, 
-                                    Object parent,
-                                    RuntimeConfigurable parentWrapper,
-                                    Target target) {
-            super(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 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 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);
-                    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);
-            }
-        }
-
-        /**
-         * 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 {
-                    addText(project, child, buf, start, count);
-                } catch (BuildException exc) {
-                    throw new SAXParseException(exc.getMessage(), 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 void startElement(String uri, String name, String qname, 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 for all data types directly subordinate to project or target.
-     */
-    private 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(DefaultHandler parentHandler) {
-            this(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(DefaultHandler parentHandler, Target target) {
-            super(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 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 init(String propType, AttributeList attrs) throws SAXParseException {
-            try {
-                element = 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, project);
-                    configureId(element, attrs);
-                }
-            } catch (BuildException exc) {
-                throw new SAXParseException(exc.getMessage(), 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 {
-                addText(project, element, buf, start, count);
-            } catch (BuildException exc) {
-                throw new SAXParseException(exc.getMessage(), 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 void startElement(String uri, String name, String qname, AttributeList attrs)
-            throws SAXParseException
-        {
-            new NestedElementHandler(this, element, wrapper, target).init(name, attrs);
-        }
-    }
-
-    /**
-     * Returns the parser factory to use. Only one parser
-     * factory is ever created by this method (multi-threading 
-     * issues aside) and is then cached for future use.
-     * 
-     * @return a SAXParserFactory to use within this class
-     */
-    private static SAXParserFactory getParserFactory() {
-        if (parserFactory == null) {
-            parserFactory = SAXParserFactory.newInstance();
-        }
-
-        return parserFactory;
-    }
-
-    /**
-     * 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/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 90c268b..0000000
--- a/proposal/sandbox/filterreaders/README
+++ /dev/null
@@ -1,78 +0,0 @@
-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/filterreaders/docs/manual/CoreTasks/loadfile.html b/proposal/sandbox/filterreaders/docs/manual/CoreTasks/loadfile.html
deleted file mode 100644
index 7603b6e..0000000
--- a/proposal/sandbox/filterreaders/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/proposal/sandbox/filterreaders/docs/manual/CoreTasks/loadproperties.html b/proposal/sandbox/filterreaders/docs/manual/CoreTasks/loadproperties.html
deleted file mode 100644
index 91d94ad..0000000
--- a/proposal/sandbox/filterreaders/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/proposal/sandbox/filterreaders/docs/manual/CoreTypes/filterchain.html b/proposal/sandbox/filterreaders/docs/manual/CoreTypes/filterchain.html
deleted file mode 100644
index 6bf995f..0000000
--- a/proposal/sandbox/filterreaders/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/proposal/sandbox/filterreaders/src/etc/testcases/taskdefs/copy.filterset b/proposal/sandbox/filterreaders/src/etc/testcases/taskdefs/copy.filterset
deleted file mode 100644
index 367acbb..0000000
--- a/proposal/sandbox/filterreaders/src/etc/testcases/taskdefs/copy.filterset
+++ /dev/null
@@ -1 +0,0 @@
-This is the @TITLE@.
\ No newline at end of file
diff --git a/proposal/sandbox/filterreaders/src/etc/testcases/taskdefs/copy.xml b/proposal/sandbox/filterreaders/src/etc/testcases/taskdefs/copy.xml
deleted file mode 100644
index 73014a7..0000000
--- a/proposal/sandbox/filterreaders/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/proposal/sandbox/filterreaders/src/etc/testcases/taskdefs/expected/copy.filterset.filtered b/proposal/sandbox/filterreaders/src/etc/testcases/taskdefs/expected/copy.filterset.filtered
deleted file mode 100644
index ddbcf5d..0000000
--- a/proposal/sandbox/filterreaders/src/etc/testcases/taskdefs/expected/copy.filterset.filtered
+++ /dev/null
@@ -1 +0,0 @@
-This is the Apache Ant Project.
diff --git a/proposal/sandbox/filterreaders/src/etc/testcases/taskdefs/loadfile.xml b/proposal/sandbox/filterreaders/src/etc/testcases/taskdefs/loadfile.xml
deleted file mode 100644
index b90fad2..0000000
--- a/proposal/sandbox/filterreaders/src/etc/testcases/taskdefs/loadfile.xml
+++ /dev/null
@@ -1,110 +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="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"/>
-  </target>
-
-  </project>
diff --git a/proposal/sandbox/filterreaders/src/etc/testcases/taskdefs/move.xml b/proposal/sandbox/filterreaders/src/etc/testcases/taskdefs/move.xml
deleted file mode 100644
index e40e785..0000000
--- a/proposal/sandbox/filterreaders/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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/BaseFilterReader.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/BaseFilterReader.java
deleted file mode 100644
index 5ce041e..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/BaseFilterReader.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf 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 */
-    private Project project = null;
-
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public BaseFilterReader() {
-        // Dummy constructor to be invoked by Ant's Introspector
-        super(new StringReader(new String()));
-        try {
-            close();
-        } catch (IOException  ioe) {
-            // Ignore
-        }
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public BaseFilterReader(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Read 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
-     * @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;
-    }
-
-    /**
-     * Skip 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;
-    }
-
-    /**
-     * Set the initialized status.
-     */
-    protected final void setInitialized(final boolean initialized) {
-        this.initialized = initialized;
-    }
-
-    /**
-     * Get the initialized status.
-     */
-    protected final boolean getInitialized() {
-        return initialized;
-    }
-
-    /**
-     * Set the project to work with
-     */
-    public final void setProject(final Project project) {
-        this.project = project;
-    }
-
-    /**
-     * Get the project
-     */
-    protected final Project getProject() {
-        return project;
-    }
-
-    /**
-     * Read till EOL
-     */
-    protected final String readLine() throws IOException {
-        int ch = in.read();
-        String line = (ch == -1) ? null : "";
-        while (ch != -1) {
-            line += (char) ch;
-            if (ch == '\n') {
-                break;
-            }
-            ch = in.read();
-        }
-        return line;
-    }
-
-    /**
-     * Read till EOF
-     */
-    protected final String readFully() throws IOException {
-        return FileUtils.readFully(in, 8192);
-    }
-}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/BaseParamFilterReader.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/BaseParamFilterReader.java
deleted file mode 100644
index ff9109c..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/BaseParamFilterReader.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.filters;
-
-import java.io.FilterReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-
-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;
-
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public BaseParamFilterReader() {
-        super();
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public BaseParamFilterReader(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Set Parameters
-     */
-    public final void setParameters(final Parameter[] parameters) {
-        this.parameters = parameters;
-        setInitialized(false);
-    }
-
-    protected final Parameter[] getParameters() {
-        return parameters;
-    }
-}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ChainableReader.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ChainableReader.java
deleted file mode 100644
index 548d0aa..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ChainableReader.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.tools.ant.filters;
-
-import java.io.Reader;
-
-/**
- * Chains readers.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public interface ChainableReader {
-    public Reader chain(Reader rdr);
-}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ClassConstants.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ClassConstants.java
deleted file mode 100644
index 10e694e..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ClassConstants.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf 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.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.Reader;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.filters.util.JavaClassHelper;
-
-/**
- * Assemble the constants declared in a Java class in
- * key1=value1(line separator)key2=value2
- * format
- *
- * Notes:
- * =====
- * 1. This filter uses the BCEL external toolkit.
- * 2. This assembles only those constants that are not created
- *    using the syntax new whatever().
- * 3. This assembles constants declared using the basic datatypes
- *    and String only.
- * 4. The access modifiers of the declared constants do not matter.
- *
- * Example:
- * =======
- *
- * &lt;classconstants/&gt;
- *
- * Or:
- *
- * &lt;filterreader classname=&quot;org.apache.tools.ant.filters.ClassConstants&quot;/&gt;
- *
- * @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;
-
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public ClassConstants() {
-        super();
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public ClassConstants(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Read and assemble the constants declared in a class file.
-     */
-    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();
-                final StringBuffer sb = JavaClassHelper.getConstants(bytes);
-                if (sb.length() > 0) {
-                    queuedData = sb.toString();
-                    return read();
-                }
-            }
-        }
-        return ch;
-    }
-
-    /**
-     * Create a new ClassConstants using the passed in
-     * Reader for instantiation.
-     */
-    public final Reader chain(final Reader rdr) {
-        ClassConstants newFilter = new ClassConstants(rdr);
-        return newFilter;
-    }
-}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ExpandProperties.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ExpandProperties.java
deleted file mode 100644
index 3cf1460..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ExpandProperties.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.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-
-import org.apache.tools.ant.Project;
-
-/**
- * Expand Ant properties, if any, in the data.
- *
- * Example:
- * =======
- *
- * &lt;expandproperties/&gt;
- *
- * Or:
- *
- * &lt;filterreader classname=&quot;org.apache.tools.ant.filters.ExpandProperties&quot;/&gt;
- *
- * @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;
-
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public ExpandProperties() {
-        super();
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public ExpandProperties(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Prefix lines with user defined prefix.
-     */
-    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;
-    }
-
-    /**
-     * Create a new PrefixLines using the passed in
-     * Reader for instantiation.
-     */
-    public final Reader chain(final Reader rdr) {
-        ExpandProperties newFilter = new ExpandProperties(rdr);
-        newFilter.setProject(getProject());
-        return newFilter;
-    }
-}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/HeadFilter.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/HeadFilter.java
deleted file mode 100644
index f0eb998..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/HeadFilter.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.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * Read the first n lines (Default is first 10 lines)
- *
- * Example:
- * =======
- *
- * &lt;headfilter lines=&quot;3&quot;/&gt;
- *
- * Or:
- *
- * &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;
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class HeadFilter
-    extends BaseParamFilterReader
-    implements ChainableReader
-{
-    /** Lines key to represent the number of lines to be returned. */
-    private static final String LINES_KEY = "lines";
-
-    /** Number of lines currently read in. */
-    private long linesRead = 0;
-
-    /** Default number of lines returned. */
-    private long lines = 10;
-
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public HeadFilter() {
-        super();
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public HeadFilter(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Read the first n lines.
-     */
-    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;
-    }
-
-    /**
-     * Set number of lines to be returned.
-     */
-    public final void setLines(final long lines) {
-        this.lines = lines;
-    }
-
-    /**
-     * Get number of lines to be returned.
-     */
-    private final long getLines() {
-        return lines;
-    }
-
-    /**
-     * Create a new HeadFilter using the passed in
-     * Reader for instantiation.
-     */
-    public final Reader chain(final Reader rdr) {
-        HeadFilter newFilter = new HeadFilter(rdr);
-        newFilter.setLines(getLines());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Scan for the lines parameter.
-     */
-    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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/LineContains.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/LineContains.java
deleted file mode 100644
index 8e9fd6b..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/LineContains.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf 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 Reader to fetch only those lines that contain user specified
- * strings.
- *
- * Example:
- * =======
- *
- * &lt;linecontains&gt;
- *   &lt;contains value=&quot;foo&quot;&gt;
- *   &lt;contains value=&quot;bar&quot;&gt;
- * &lt;/linecontains&gt;
- *
- * Or:
- *
- * &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;
- *
- * This will fetch all those lines that contain foo and bar
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class LineContains
-    extends BaseParamFilterReader
-    implements ChainableReader
-{
-    /** contains key */
-    private static final String CONTAINS_KEY = "contains";
-
-    /** Vector that holds the strings that input lines must contain. */
-    private Vector contains = new Vector();
-
-    /** Currently read in line. */
-    private String line = null;
-
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public LineContains() {
-        super();
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public LineContains(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Choose only those lines that contains
-     * user defined values.
-     */
-    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;
-    }
-
-    /**
-     * Add a contains element.
-     */
-    public final void addConfiguredContains(final Contains contains) {
-        this.contains.addElement(contains.getValue());
-    }
-
-    /**
-     * Set contains vector.
-     */
-    private void setContains(final Vector contains) {
-        this.contains = contains;
-    }
-
-    /**
-     * Get contains vector.
-     */
-    private final Vector getContains() {
-        return contains;
-    }
-
-    /**
-     * Create a new LineContains using the passed in
-     * Reader for instantiation.
-     */
-    public final Reader chain(final Reader rdr) {
-        LineContains newFilter = new LineContains(rdr);
-        newFilter.setContains(getContains());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Parse params 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;
-
-        /**
-         * Set the contains string
-         */
-        public final void setValue(String contains) {
-            value = contains;
-        }
-
-        /**
-         * Get the contains string
-         */
-        public final String getValue() {
-            return value;
-        }
-    }
-}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java
deleted file mode 100644
index 8e2e2e9..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/LineContainsRegExp.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.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 Reader to fetch only those lines that contain user specified
- * regular expression matching strings.
- *
- * Example:
- * =======
- *
- * &lt;linecontainsregexp&gt;
- *   &lt;regexp pattern=&quot;foo*&quot;&gt;
- * &lt;/linecontainsregexp&gt;
- *
- * Or:
- *
- * &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;
- *
- * This will fetch all those lines that contain the pattern foo
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class LineContainsRegExp
-    extends BaseParamFilterReader
-    implements ChainableReader
-{
-    /** contains key */
-    private static final String REGEXP_KEY = "regexp";
-
-    /** Vector that holds the strings that input lines must contain. */
-    private Vector regexps = new Vector();
-
-    /** Currently read in line. */
-    private String line = null;
-
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public LineContainsRegExp() {
-        super();
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public LineContainsRegExp(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Choose only those lines that contains
-     * user defined values.
-     */
-    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;
-    }
-
-    /**
-     * Add a contains element.
-     */
-    public final void addConfiguredRegexp(final RegularExpression regExp) {
-        this.regexps.addElement(regExp);
-    }
-
-    /**
-     * Set regexps vector.
-     */
-    private void setRegexps(final Vector regexps) {
-        this.regexps = regexps;
-    }
-
-    /**
-     * Get regexps vector.
-     */
-    private final Vector getRegexps() {
-        return regexps;
-    }
-
-    /**
-     * Create a new LineContainsRegExp using the passed in
-     * Reader for instantiation.
-     */
-    public final Reader chain(final Reader rdr) {
-        LineContainsRegExp newFilter = new LineContainsRegExp(rdr);
-        newFilter.setRegexps(getRegexps());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Parse params 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 (REGEXP_KEY.equals(params[i].getType())) {
-                    String pattern = params[i].getValue();
-                    RegularExpression regexp = new RegularExpression();
-                    regexp.setPattern(pattern);
-                    regexps.addElement(regexp);
-                }
-            }
-        }
-    }
-}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/PrefixLines.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/PrefixLines.java
deleted file mode 100644
index 6ba85a9..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/PrefixLines.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.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * Attach a prefix to every line
- *
- * Example:
- * =======
- *
- * &lt;prefixlines prefix=&quot;Foo&quot;/&gt;
- *
- * Or:
- *
- * &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;
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class PrefixLines
-    extends BaseParamFilterReader
-    implements ChainableReader
-{
-    /** prefix key */
-    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;
-
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public PrefixLines() {
-        super();
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public PrefixLines(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Prefix lines with user defined prefix.
-     */
-    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;
-    }
-
-    /**
-     * Set the prefix
-     */
-    public final void setPrefix(final String prefix) {
-        this.prefix = prefix;
-    }
-
-    /**
-     * Get the prefix
-     */
-    private final String getPrefix() {
-        return prefix;
-    }
-
-    /**
-     * Create a new PrefixLines using the passed in
-     * Reader for instantiation.
-     */
-    public final Reader chain(final Reader rdr) {
-        PrefixLines newFilter = new PrefixLines(rdr);
-        newFilter.setPrefix(getPrefix());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Initialize prefix if available from the param element.
-     */
-    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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ReplaceTokens.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ReplaceTokens.java
deleted file mode 100644
index fd7ab0a..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ReplaceTokens.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf 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;
-
-/**
- * Replace tokens with user supplied values
- *
- * Example Usage:
- * =============
- *
- * &lt;replacetokens begintoken=&quot;#&quot; endtoken=&quot;#&quot;&gt;
- *   &lt;token key=&quot;DATE&quot; value=&quot;${TODAY}&quot;/&gt;
- * &lt;/replacetokens&gt;
- *
- * Or:
- *
- * &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;
- *
- * @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. */
-    private Hashtable hash = new Hashtable();
-
-    /** Begin token. */
-    private char beginToken = DEFAULT_BEGIN_TOKEN;
-
-    /** End token. */
-    private char endToken = DEFAULT_END_TOKEN;
-
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public ReplaceTokens() {
-        super();
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public ReplaceTokens(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Replace tokens with values.
-     */
-    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;
-    }
-
-    /**
-     * Set begin token.
-     */
-    public final void setBeginToken(final char beginToken) {
-        this.beginToken = beginToken;
-    }
-
-    /**
-     * Get begin token.
-     */
-    private final char getBeginToken() {
-        return beginToken;
-    }
-
-    /**
-     * Set end token.
-     */
-    public final void setEndToken(final char endToken) {
-        this.endToken = endToken;
-    }
-
-    /**
-     * Get begin token.
-     */
-    private final char getEndToken() {
-        return endToken;
-    }
-
-    /**
-     * Add a token element.
-     */
-    public final void addConfiguredToken(final Token token) {
-        hash.put(token.getKey(), token.getValue());
-    }
-
-    /**
-     * Set the tokens.
-     */
-    private void setTokens(final Hashtable hash) {
-        this.hash = hash;
-    }
-
-    /**
-     * Get the tokens.
-     */
-    private final Hashtable getTokens() {
-        return hash;
-    }
-
-    /**
-     * Create a new ReplaceTokens using the passed in
-     * Reader for instantiation.
-     */
-    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;
-    }
-
-    /**
-     * Initialize tokens and load 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;
-
-        /**
-         * Set the token key
-         */
-        public final void setKey(String key) {
-            this.key = key;
-        }
-
-        /**
-         * Set the token value
-         */
-        public final void setValue(String value) {
-            this.value = value;
-        }
-
-        /**
-         * Get the token key
-         */
-        public final String getKey() {
-            return key;
-        }
-
-        /**
-         * Get the token value
-         */
-        public final String getValue() {
-            return value;
-        }
-    }
-}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StringInputStream.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StringInputStream.java
deleted file mode 100644
index abfc504..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StringInputStream.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.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-
-/**
- * Wrap a String as an InputStream
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- * @created 20 February 2002
- */
-public class StringInputStream
-    extends InputStream
-{
-    /** Source string is stored as a StringReader */
-    private StringReader in;
-
-    /**
-     * Compose a stream from a String
-     */
-    public StringInputStream(String source) {
-        in = new StringReader(source);
-    }
-
-    /**
-     * Read from the Stringreader
-     */
-    public int read() throws IOException {
-        return in.read();
-    }
-
-    /**
-     * Close the Stringreader
-     */
-    public void close() throws IOException {
-        in.close();
-    }
-
-    /**
-     * Mark the read limit of the StringReader
-     */
-    public synchronized void mark(final int limit) {
-        try {
-            in.mark(limit);
-        } catch (IOException ioe) {
-            throw new RuntimeException(ioe.getMessage());
-        }
-    }
-
-    /**
-     * Resetthe StringReader
-     */
-    public synchronized void reset() throws IOException {
-        in.reset();
-    }
-
-    public boolean markSupported() {
-        return true;
-    }
-}
-
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripJavaComments.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripJavaComments.java
deleted file mode 100644
index fb01559..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripJavaComments.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;
-
-/**
- * This is a java comment and string stripper reader that filters
- * these 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
-{
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public StripJavaComments() {
-        super();
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public StripJavaComments(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Filter out Java Style comments
-     */
-    public final int read() throws IOException {
-        int ch = in.read();
-        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;
-                        }
-                    }
-                }
-            }
-        }
-
-        if (ch == '"') {
-            while (ch != -1) {
-                ch = in.read();
-                if (ch == '\\') {
-                    ch = in.read();
-                } else if (ch == '"') {
-                    ch = read();
-                    break;
-                }
-            }
-        }
-
-        if (ch == '\'') {
-            ch = in.read();
-            if (ch == '\\') {
-                ch = in.read();
-            }
-            ch = in.read();
-            ch = read();
-        }
-
-        return ch;
-    }
-
-    /**
-     * Create a new StripJavaComments object using the passed in
-     * Reader for instantiation.
-     */
-    public final Reader chain(final Reader rdr) {
-        StripJavaComments newFilter = new StripJavaComments(rdr);
-        return newFilter;
-    }
-}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineBreaks.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineBreaks.java
deleted file mode 100644
index e448bcd..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineBreaks.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.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.
- *
- * &lt;striplinebreaks/&gt;
- *
- * Or:
- *
- * &lt;filterreader classname=&quot;org.apache.tools.ant.filters.StripLineBreaks&quot;/&gt;
- *
- * @author Steve Loughran
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class StripLineBreaks
-    extends BaseParamFilterReader
-    implements ChainableReader
-{
-    /**
-     * Linebreaks. What do to on funny IBM mainframes with odd line endings?
-     */
-    private static final String DEFAULT_LINE_BREAKS = "\r\n";
-
-    /**
-     * Linebreaks key that can be set via param element of
-     * AntFilterReader
-     */
-    private static final String LINE_BREAKS_KEY = "linebreaks";
-
-
-    /** Holds the characters that are recognized as line breaks. */
-    private String lineBreaks = DEFAULT_LINE_BREAKS;
-
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public StripLineBreaks() {
-        super();
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public StripLineBreaks(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * If the character that is being read in is a
-     * line break character, ignore it and move on to the
-     * next one.
-     */
-    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;
-    }
-
-    /**
-     * Set the line break characters.
-     */
-    public final void setLineBreaks(final String lineBreaks) {
-        this.lineBreaks = lineBreaks;
-    }
-
-    /**
-     * Get the line breaks characters
-     */
-    private final String getLineBreaks() {
-        return lineBreaks;
-    }
-
-    /**
-     * Create a new StripLineBreaks object using the passed in
-     * Reader for instantiation.
-     */
-    public final Reader chain(final Reader rdr) {
-        StripLineBreaks newFilter = new StripLineBreaks(rdr);
-        newFilter.setLineBreaks(getLineBreaks());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Line break characters set using the param element.
-     */
-    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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineComments.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineComments.java
deleted file mode 100644
index f9521c6..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/StripLineComments.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf 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 is a line comment stripper reader
- *
- * Example:
- * =======
- *
- * &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;
- *
- * Or:
- *
- * &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;
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class StripLineComments
-    extends BaseParamFilterReader
-    implements ChainableReader
-{
-    /** The type that param recognizes to set the comments. */
-    private static final String COMMENTS_KEY = "comment";
-
-    /** Vector that holds comments. */
-    private Vector comments = new Vector();
-
-    /** The line that has been read ahead. */
-    private String line = null;
-
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public StripLineComments() {
-        super();
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public StripLineComments(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Read in line by line; Ignore line if it
-     * begins with a comment string.
-     */
-    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;
-    }
-
-    /**
-     * Add the Comment element.
-     */
-    public final void addConfiguredComment(final Comment comment) {
-        comments.addElement(comment.getValue());
-    }
-
-    /**
-     * Set the comments vector.
-     */
-    private void setComments(final Vector comments) {
-        this.comments = comments;
-    }
-
-    /**
-     * Get the comments vector.
-     */
-    private final Vector getComments() {
-        return comments;
-    }
-
-    /**
-     * Create a new StripLineComments object using the passed in
-     * Reader for instantiation.
-     */
-    public final Reader chain(final Reader rdr) {
-        StripLineComments newFilter = new StripLineComments(rdr);
-        newFilter.setComments(getComments());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Comments set using the param element.
-     */
-    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.
-     */
-    public static class Comment {
-
-        /** The comment*/
-        private String value;
-
-        /**
-         * Set the comment.
-         */
-        public final void setValue(String comment) {
-            value = comment;
-        }
-
-        /**
-         * Get the comment.
-         */
-        public final String getValue() {
-            return value;
-        }
-    }
-}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TabsToSpaces.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TabsToSpaces.java
deleted file mode 100644
index 8c91aa2..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TabsToSpaces.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.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * Converts tabs to spaces.
- *
- * Example Usage:
- * =============
- *
- * &lt;tabtospaces tablength=&quot;8&quot;/&gt;
- *
- * Or:
- *
- * <filterreader classname=&quot;org.apache.tools.ant.filters.TabsToSpaces&quot;>
- *    <param name=&quot;tablength&quot; value=&quot;8&quot;/>
- * </filterreader>
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class TabsToSpaces
-    extends BaseParamFilterReader
-    implements ChainableReader
-{
-    /** The default tab length is 8 */
-    private static final int DEFAULT_TAB_LENGTH = 8;
-
-    /** The name that param recognizes to set the tablength. */
-    private static final String TAB_LENGTH_KEY = "tablength";
-
-    /** Default tab length. */
-    private int tabLength = DEFAULT_TAB_LENGTH;
-
-    /** How many more spaces must be returned to replace a tab? */
-    private int spacesRemaining = 0;
-
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public TabsToSpaces() {
-        super();
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public TabsToSpaces(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Convert tabs with spaces
-     */
-    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;
-    }
-
-    /**
-     * Set the tab length.
-     */
-    public final void setTablength(final int tabLength) {
-        this.tabLength = tabLength;
-    }
-
-    /**
-     * Get the tab length
-     */
-    private final int getTablength() {
-        return tabLength;
-    }
-
-    /**
-     * Create a new TabsToSpaces object using the passed in
-     * Reader for instantiation.
-     */
-    public final Reader chain(final Reader rdr) {
-        TabsToSpaces newFilter = new TabsToSpaces(rdr);
-        newFilter.setTablength(getTablength());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Initialize tokens
-     */
-    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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TailFilter.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TailFilter.java
deleted file mode 100644
index 0f9ccd9..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/TailFilter.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.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * Read the last n lines.  Default is last 10 lines.
- *
- * Example:
- * =======
- *
- * &lt;tailfilter lines=&quot;3&quot;/&gt;
- *
- * Or:
- *
- * &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;
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class TailFilter
-    extends BaseParamFilterReader
-    implements ChainableReader
-{
-    /** The name that param recognizes to set the number of lines. */
-    private static final String LINES_KEY = "lines";
-
-    /** Number of lines currently read in. */
-    private long linesRead = 0;
-
-    /** Default number of lines returned. */
-    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;
-
-    /** Has read ahead been completed? */
-    private boolean completedReadAhead = false;
-
-    /** Current index position on the buffer. */
-    private int bufferPos = 0;
-
-    /**
-     * This constructor is a dummy constructor and is
-     * not meant to be used by any class other than Ant's
-     * introspection mechanism. This will close the filter
-     * that is created making it useless for further operations.
-     */
-    public TailFilter() {
-        super();
-    }
-
-    /**
-     * Create a new filtered reader.
-     *
-     * @param in  a Reader object providing the underlying stream.
-     */
-    public TailFilter(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Read ahead and keep in buffer last n lines only at any given
-     * point.  Grow buffer as needed.
-     */
-    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];
-        }
-    }
-
-    /**
-     * Set number of lines to be returned.
-     */
-    public final void setLines(final long lines) {
-        this.lines = lines;
-    }
-
-    /**
-     * Get number of lines to be returned.
-     */
-    private final long getLines() {
-        return lines;
-    }
-
-    /**
-     * Create a new TailFilter using the passed in
-     * Reader for instantiation.
-     */
-    public final Reader chain(final Reader rdr) {
-        TailFilter newFilter = new TailFilter(rdr);
-        newFilter.setLines(getLines());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Scan for the lines parameter.
-     */
-    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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/util/ChainReaderHelper.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/util/ChainReaderHelper.java
deleted file mode 100644
index 384ba17..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/util/ChainReaderHelper.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.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.io.*;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Vector;
-
-/**
- * Process a FilterReader chain.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- * @created 23 February 2002
- */
-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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/util/JavaClassHelper.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/util/JavaClassHelper.java
deleted file mode 100644
index 809a407..0000000
--- a/proposal/sandbox/filterreaders/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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/Copy.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/Copy.java
deleted file mode 100644
index 0a3baf5..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/Copy.java
+++ /dev/null
@@ -1,514 +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$
- *
- * @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;
-
-    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;
-
-    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;
-    }
-
-    /**
-     * 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 {
-        // make sure we don't have an illegal set of options
-        validateAttributes();
-
-        // 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 = "Could not find file "
-                                 + file.getAbsolutePath() + " to copy.";
-                log(message);
-                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();
-
-        // clean up destDir again - so this instance can be used a second
-        // time without throwing an exception
-        if (destFile != null) {
-            destDir = null;
-        }
-        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) {
-                    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 perform operation from directory to file.");
-                }
-            }
-        }
-
-        if (destFile != null) {
-            destDir = new File(destFile.getParent());   // be 1.1 friendly
-        }
-
-    }
-
-    /**
-     * 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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/LoadFile.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/LoadFile.java
deleted file mode 100644
index 6021551..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/LoadFile.java
+++ /dev/null
@@ -1,228 +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.*;
-import java.util.Vector;
-
-/**
- * Load a file into a property
- *
- * @author Steve Loughran
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- * @created 10 December 2001
- */
-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 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>
-     *
-     * @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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java
deleted file mode 100644
index 9e6982f..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/LoadProperties.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;
-
-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.StringInputStream;
-import org.apache.tools.ant.filters.util.ChainReaderHelper;
-
-import java.io.*;
-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>
- * @created 20 February 2002
- */
-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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/Move.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/Move.java
deleted file mode 100644
index 269e4b6..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/taskdefs/Move.java
+++ /dev/null
@@ -1,312 +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;
-import java.util.Vector;
-
-/**
- * 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$
- *
- * @ant:task category="filesystem"
- */
-public class Move extends Copy {
-
-    private Vector filterSets = null;
-    private Vector filterChains = null;
-
-    public Move() {
-        super();
-        forceOverwrite = true;
-    }
-
-//************************************************************************
-//  protected and private methods
-//************************************************************************
-
-    protected void doFileOperations() {
-        filterSets = getFilterSets();
-        filterChains = getFilterChains();
-
-        //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, filterChains,
-                                                    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 ((filterSets != null && filterSets.size() > 0) ||
-            (filterChains != null && filterChains.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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/AntFilterReader.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/AntFilterReader.java
deleted file mode 100644
index 80f20b6..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/AntFilterReader.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.types;
-
-import java.io.FilterReader;
-import java.util.Hashtable;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/**
- * 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;
-    }
-}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/FilterChain.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/FilterChain.java
deleted file mode 100644
index d5a8c6b..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/FilterChain.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.tools.ant.types;
-
-import java.util.Vector;
-
-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 {
-
-    private final 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);
-    }
-}
diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/Parameter.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/Parameter.java
deleted file mode 100644
index 224de23..0000000
--- a/proposal/sandbox/filterreaders/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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/Parameterizable.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/Parameterizable.java
deleted file mode 100644
index 7c4b5e0..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/Parameterizable.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.tools.ant.types;
-
-import java.util.Vector;
-
-/**
- * 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/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/util/FileUtils.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/util/FileUtils.java
deleted file mode 100644
index 9febac2..0000000
--- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/util/FileUtils.java
+++ /dev/null
@@ -1,744 +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 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;
-
-/**
- * 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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</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;
-
-    /**
-     * Factory method.
-     */
-    public static FileUtils newFileUtils() {
-        return new FileUtils();
-    }
-
-    /**
-     * Empty constructor.
-     */
-    protected FileUtils() {}
-
-    /**
-     * 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;
-
-                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();
-                }
-
-                out.close();
-                in.close();
-            } else {
-                FileInputStream in = new FileInputStream(sourceFile);
-                FileOutputStream 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);
-
-                in.close();
-                out.close();
-            }
-
-            if (preserveLastModified) {
-                setFileLastModified(destFile, sourceFile.lastModified());
-            }
-        }
-    }
-
-    /**
-     * see whether we have a setLastModified method in File and return it.
-     */
-    protected final Method getSetLastModified() {
-        if (Project.getJavaVersion() == Project.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 (Project.getJavaVersion() == Project.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 (filename.startsWith(File.separator) ||
-
-            (filename.length() >= 2 &&
-             Character.isLetter(filename.charAt(0)) &&
-             filename.charAt(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
-        if (!path.startsWith(File.separator) &&
-            ! (path.length() >= 2 &&
-               Character.isLetter(path.charAt(0)) &&
-               path.charAt(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 (path.length() >= 2 &&
-            Character.isLetter(path.charAt(0)) &&
-            path.charAt(1) == ':') {
-
-            dosWithDrive = true;
-
-            char[] ca = path.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]);
-                }
-            }
-
-            path = sb.toString().replace('\\', File.separatorChar);
-            if (path.length() == 2) {
-                root = path;
-                path = "";
-            } else {
-                root = path.substring(0, 3);
-                path = path.substring(3);
-            }
-
-        } 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;
-    }
-}
-
diff --git a/proposal/sandbox/filterreaders/src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java b/proposal/sandbox/filterreaders/src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java
deleted file mode 100644
index f10b7e4..0000000
--- a/proposal/sandbox/filterreaders/src/testcases/org/apache/tools/ant/taskdefs/CopyTest.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 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 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 (Project.getJavaVersion() != Project.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/proposal/sandbox/filterreaders/src/testcases/org/apache/tools/ant/taskdefs/LoadFileTest.java b/proposal/sandbox/filterreaders/src/testcases/org/apache/tools/ant/taskdefs/LoadFileTest.java
deleted file mode 100644
index f4703c3..0000000
--- a/proposal/sandbox/filterreaders/src/testcases/org/apache/tools/ant/taskdefs/LoadFileTest.java
+++ /dev/null
@@ -1,185 +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
- * @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");
-        }
-    }
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testFilterChain()
-            throws BuildException {
-        executeTarget("testFilterChain");
-        if(project.getProperty("testFilterChain").indexOf("World!")<0) {
-            fail("Filter Chain broken");
-        }
-    }
-
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testOneLine()
-            throws BuildException {
-            expectPropertySet("testOneLine","testOneLine","1,2,3,4");
-
-    }
-}
diff --git a/proposal/sandbox/filterreaders/src/testcases/org/apache/tools/ant/taskdefs/MoveTest.java b/proposal/sandbox/filterreaders/src/testcases/org/apache/tools/ant/taskdefs/MoveTest.java
deleted file mode 100644
index 7830dd7..0000000
--- a/proposal/sandbox/filterreaders/src/testcases/org/apache/tools/ant/taskdefs/MoveTest.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 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 testSingleFileFileset() {
-        executeTarget("test_single_file_fileset");
-        File file  = new File(getProjectDir(),
-                                        "copytest_single_file_fileset.tmp");
-        assertTrue(file.exists());
-    }
-
-    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/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 05e4010..0000000
--- a/proposal/sandbox/input/README
+++ /dev/null
@@ -1,62 +0,0 @@
-Ant's current CVS version contains an <input> task that gathers user
-input by reading from System.in - this is not too nice for people
-embedding Ant in IDEs. 8-)
-
-<input> also supports an undocumented testinput attribute that is used
-by Ant's test cases to allow them to run without user interaction, but
-could also be used to provide predefined answers to unattended builds.
-
-This proposal tries to define a very basic input framework for Ant
-that would allow Ant to be easily embedded into IDEs via
-implementations of the org.apache.tools.ant.input.InputHandler
-interface.  At the same time an implementation of the interface is
-provided that allows the input to be specified via an external
-property file.
-
-There are three implementations of the InputHandler interface,
-DefaultInputHandler which reads form System.in just like the <input>
-task originally did, PropertyFileInputHandler for non-interactive
-builds and SwingInputHandler which is nothing more than a proof of
-concept.
-
-Input requests get encapsulated in instances of the
-org.apache.tools.ant.input.InputRequest class - or subclasses thereof
-- which provide a method to also validate the input, moving this
-responsibility from the <input> task to the InputRequest itself.
-
-There are two types of InputRequests ATM, InputRequest encapsulates a
-request for a simple unrestricted text input,
-MultipleChoiceInputRequest is a request where valid inputs are
-restricted to a given set of values.
-
-If you run ant on the build file in this directory, a version of
-ant.jar will be created in the build subdirectory that is identical to
-the main trunk of Ant except for the input task itself and two minor
-changes to Project and Main, that allow InputHandlers to be plugged in
-programmatically or via a commandline switch -inputhandler.
-
-With this version of Ant, run the build file in proposals/testcases,
-Ant should behave the same way the input task for the main branch does
-- except that it won't allow you to enter invalid input in the multi
-target.
-
-If you invoke Ant like this:
-
-ant -f proposal/sandbox/input/src/testcases/input.xml -inputhandler org.apache.tools.ant.input.SwingInputHandler
-
-You'll get the ugliest dialog you've ever seen, but it works ;-)
-
-Use 
-
-ANT_OPTS=-Dant.input.properties=proposal/sandbox/input/src/testcases/works.properties\
-ant -f proposal/sandbox/input/src/testcases/input.xml -inputhandler org.apache.tools.ant.input.PropertyFileInputHandler
-
-to see the non-interactive build process in action.  fails.properties
-provides a sample of possible input failures.
-
-The original testcase for <input> has been ported to the new framework
-as well, run it via
-
-ant run-test
-
-in this directory.
\ No newline at end of file
diff --git a/proposal/sandbox/input/build.xml b/proposal/sandbox/input/build.xml
deleted file mode 100644
index 89968af..0000000
--- a/proposal/sandbox/input/build.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<project name="input-sandbox" default="main" basedir=".">
-
-  <target name="setup">
-    <property name="main.ant" location="../../.." />
-    <property name="classes.dir" value="build/classes" />
-    <mkdir dir="${classes.dir}" />
-    <ant dir="${main.ant}" inheritall="false" target="build" />
-    <copy toDir="${classes.dir}" preservelastmodified="true" >
-      <fileset dir="${main.ant}/${classes.dir}">
-        <include name='**' />
-	<exclude name='org/apache/tools/ant/Project.class' />
-	<exclude name='org/apache/tools/ant/Main.class' />
-	<exclude name='org/apache/tools/ant/taskdefs/Input.class' />
-      </fileset>
-    </copy>
-  </target>
-
-  <target name="main" depends="setup">
-    <javac srcdir="src/main" destdir="${classes.dir}" />
-    <jar destfile="build/ant.jar">
-      <fileset dir="${classes.dir}">
-        <exclude name="**/optional/*" />
-      </fileset>
-    </jar>
-  </target>
-
-  <target name="setup-tests" depends="setup">
-    <property name="testcases.dir" value="build/testcases" />
-    <mkdir dir="${testcases.dir}" />
-    <ant dir="${main.ant}" inheritall="false" target="compile-tests" />
-    <copy toDir="${testcases.dir}" preservelastmodified="true" >
-      <fileset dir="${main.ant}/${testcases.dir}">
-	<include name='org/apache/tools/ant/BuildFileTest*.class' />
-      </fileset>
-    </copy>
-  </target>
-
-  <target name="compile-tests" depends="setup-tests,main">
-    <javac srcdir="src/testcases" destdir="${testcases.dir}"
-           includeantruntime="false">
-      <classpath>
-        <pathelement location="build/ant.jar" />
-        <pathelement location="${main.ant}/lib/optional/junit.jar" />
-      </classpath>
-    </javac>
-  </target>
-
-  <target name="run-test" depends="compile-tests">
-    <junit fork="true" filtertrace="false" includeantruntime="false">
-      <classpath>
-        <pathelement location="${testcases.dir}" />
-        <pathelement location="build/ant.jar" />
-        <pathelement location="${main.ant}/lib/crimson.jar" />
-        <pathelement location="${main.ant}/lib/optional/junit.jar" />
-      </classpath>
-      <formatter type="plain" usefile="false" />
-      <test name="org.apache.tools.ant.taskdefs.InputTest" />
-    </junit>
-  </target>
-</project>
\ No newline at end of file
diff --git a/proposal/sandbox/input/src/etc/testcases/taskdefs/input.properties b/proposal/sandbox/input/src/etc/testcases/taskdefs/input.properties
deleted file mode 100644
index c6981c7..0000000
--- a/proposal/sandbox/input/src/etc/testcases/taskdefs/input.properties
+++ /dev/null
@@ -1,4 +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
diff --git a/proposal/sandbox/input/src/etc/testcases/taskdefs/input.xml b/proposal/sandbox/input/src/etc/testcases/taskdefs/input.xml
deleted file mode 100644
index a2ec247..0000000
--- a/proposal/sandbox/input/src/etc/testcases/taskdefs/input.xml
+++ /dev/null
@@ -1,31 +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>
-
-</project>
diff --git a/proposal/sandbox/input/src/main/org/apache/tools/ant/Main.java b/proposal/sandbox/input/src/main/org/apache/tools/ant/Main.java
deleted file mode 100644
index 240255a..0000000
--- a/proposal/sandbox/input/src/main/org/apache/tools/ant/Main.java
+++ /dev/null
@@ -1,897 +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 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 final static 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 PrintStream out = System.out;
-
-    /** Stream that we are using for logging error messages. */
-    private 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.
-     *
-     * XXX input proposal.
-     */
-    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;
-
-    /**
-     * 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);
-        }
-    }
-                                        
-    /**
-     * 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);
-                } 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 ( !Project.JAVA_1_0.equals(Project.getJavaVersion()) &&
-                !Project.JAVA_1_1.equals(Project.getJavaVersion()) ){
-                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() );
-                
-                // first use the ProjectHelper to create the project object
-                // from the given build file.
-                String noParserMessage = 
-                    "No JAXP compliant XML parser found. Please visit http://xml.apache.org for a suitable parser";
-                try {
-                    Class.forName("javax.xml.parsers.SAXParserFactory");
-                    ProjectHelper.configureProject(project, buildFile);
-                } catch (NoClassDefFoundError ncdfe) {
-                    throw new BuildException(noParserMessage, ncdfe);
-                } catch (ClassNotFoundException cnfe) {
-                    throw new BuildException(noParserMessage, cnfe);
-                } catch (NullPointerException npe) {
-                    throw new BuildException(noParserMessage, npe);
-                }
-
-                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.
-     *
-     * XXX input proposal
-     *
-     * @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.
-     */
-    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("  -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
-     */
-    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/proposal/sandbox/input/src/main/org/apache/tools/ant/Project.java b/proposal/sandbox/input/src/main/org/apache/tools/ant/Project.java
deleted file mode 100644
index a9171c1..0000000
--- a/proposal/sandbox/input/src/main/org/apache/tools/ant/Project.java
+++ /dev/null
@@ -1,1884 +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.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 final static int MSG_ERR = 0;
-    /** Message priority of "warning". */
-    public final static int MSG_WARN = 1;
-    /** Message priority of "information". */
-    public final static int MSG_INFO = 2;
-    /** Message priority of "verbose". */
-    public final static int MSG_VERBOSE = 3;
-    /** Message priority of "debug". */
-    public final static int MSG_DEBUG = 4;
-
-    /** 
-     * Constant for the "visiting" state, used when
-     * traversing a DFS of target dependencies.
-     */
-    private final static String VISITING = "VISITING";
-    /** 
-     * Constant for the "visited" state, used when
-     * traversing a DFS of target dependencies.
-     */
-    private final static String VISITED = "VISITED";
-
-    /** Version of currently running VM. */
-    private static String javaVersion;
-
-    /** Version constant for Java 1.0 */
-    public final static String JAVA_1_0 = "1.0";
-    /** Version constant for Java 1.1 */
-    public final static String JAVA_1_1 = "1.1";
-    /** Version constant for Java 1.2 */
-    public final static String JAVA_1_2 = "1.2";
-    /** Version constant for Java 1.3 */
-    public final static String JAVA_1_3 = "1.3";
-    /** Version constant for Java 1.4 */
-    public final static String JAVA_1_4 = "1.4";
-
-    /** Default filter start token. */
-    public final static String TOKEN_START = FilterSet.DEFAULT_TOKEN_START;
-    /** Default filter end token. */
-    public final static 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.
-     *
-     * XXX  - input proposal
-     */
-    private InputHandler inputHandler = null;
-
-    /**
-     * Sets the input handler
-     *
-     * XXX  - input proposal
-     */
-    public void setInputHandler(InputHandler handler) {
-        inputHandler = handler;
-    }
-
-    /**
-     * Retrieves the current input handler.
-     *
-     * XXX  - input proposal
-     */
-    public InputHandler getInputHandler() {
-        return inputHandler;
-    }
-
-    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
-        }
-    }
-
-    /** Instance of a utility class to use for file operations. */
-    private FileUtils fileUtils;
-
-    /**
-     * Creates a new Ant project.
-     */
-    public Project() {
-        fileUtils = FileUtils.newFileUtils();
-    }
-    
-    /**
-     * 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 msg The text to log. Should not be <code>null</code>.
-     */
-     
-    public void log(String msg) {
-        log(msg, MSG_INFO);
-    }
-
-    /**
-     * Writes a project level message to the log with the given log level.
-     * @param msg The text to log. Should not be <code>null</code>.
-     * @param msgLevel The priority level to log at.
-     */
-    public void log(String msg, int msgLevel) {
-        fireMessageLogged(this, msg, 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 msg The text to log. Should not be <code>null</code>.
-     * @param msgLevel The priority level to log at.
-     */
-    public void log(Task task, String msg, int msgLevel) {
-        fireMessageLogged(task, msg, 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 msg The text to log. Should not be <code>null</code>.
-     * @param msgLevel The priority level to log at.
-     */
-    public void log(Target target, String msg, int msgLevel) {
-        fireMessageLogged(target, msg, 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).
-     */
-    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>.
-     * @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"
-     */
-    public static String getJavaVersion() {
-        return javaVersion;
-    }
-
-    /**
-     * 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 #getJavaVersion()
-     */
-    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);
-    }
-
-    /**
-     * 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.
-     * 
-     * @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 taskClass 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) {
-        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 taskType 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.
-     *
-     * @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>.
-     */
-    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 
-     *
-     * @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 copying fails
-     *
-     * @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>.
-     *
-     * @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 (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 
-     * <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) {
-        if (null != references.get(name)) {
-            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.
-        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);
-        }
-    }
-
-    /**
-     * 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) {
-        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);
-        }
-    }
-
-    /**
-     * 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);
-    }
-}
diff --git a/proposal/sandbox/input/src/main/org/apache/tools/ant/input/DefaultInputHandler.java b/proposal/sandbox/input/src/main/org/apache/tools/ant/input/DefaultInputHandler.java
deleted file mode 100644
index b950857..0000000
--- a/proposal/sandbox/input/src/main/org/apache/tools/ant/input/DefaultInputHandler.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.input;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-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$
- */
-public class DefaultInputHandler implements InputHandler {
-    
-    /**
-     * Empty no-arg constructor
-     */
-    public DefaultInputHandler() {
-    }
-
-    public void handleInput(InputRequest request) throws BuildException {
-        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) {
-                    first = false;
-                } else {
-                    sb.append(",");
-                }
-                sb.append(enum.nextElement());
-            }
-            sb.append(")");
-            prompt = sb.toString();
-        }
-            
-        do {
-            System.out.println(prompt);
-            try {
-                BufferedReader in = 
-                    new BufferedReader(new InputStreamReader(System.in));
-                String input = in.readLine();
-                request.setInput(input);
-            } catch (IOException e) {
-                throw  new BuildException("Failed to read input from Console.", e);
-            }
-        } while (!request.isInputValid());
-    }
-}
diff --git a/proposal/sandbox/input/src/main/org/apache/tools/ant/input/InputHandler.java b/proposal/sandbox/input/src/main/org/apache/tools/ant/input/InputHandler.java
deleted file mode 100644
index 5fb55e5..0000000
--- a/proposal/sandbox/input/src/main/org/apache/tools/ant/input/InputHandler.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.input;
-
-/**
- * Plugin to Ant to handle requests for user input.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-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/proposal/sandbox/input/src/main/org/apache/tools/ant/input/InputRequest.java b/proposal/sandbox/input/src/main/org/apache/tools/ant/input/InputRequest.java
deleted file mode 100644
index f1fbfad..0000000
--- a/proposal/sandbox/input/src/main/org/apache/tools/ant/input/InputRequest.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.input;
-
-/**
- * Encapsulates an input request.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-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/proposal/sandbox/input/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java b/proposal/sandbox/input/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java
deleted file mode 100644
index 5163239..0000000
--- a/proposal/sandbox/input/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.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.input;
-
-import java.util.Vector;
-
-/**
- * Encapsulates an input request.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-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;
-    }
-
-    /**
-     * The possible values.
-     */
-    public Vector getChoices() {
-        return choices;
-    }
-
-    public boolean isInputValid() {
-        return choices.contains(getInput());
-    }
-}
diff --git a/proposal/sandbox/input/src/main/org/apache/tools/ant/input/PropertyFileInputHandler.java b/proposal/sandbox/input/src/main/org/apache/tools/ant/input/PropertyFileInputHandler.java
deleted file mode 100644
index 516a9ff..0000000
--- a/proposal/sandbox/input/src/main/org/apache/tools/ant/input/PropertyFileInputHandler.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.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$
- */
-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() {
-    }
-
-    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());
-        }
-    }
-
-    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/proposal/sandbox/input/src/main/org/apache/tools/ant/input/SwingInputHandler.java b/proposal/sandbox/input/src/main/org/apache/tools/ant/input/SwingInputHandler.java
deleted file mode 100644
index e9f01e7..0000000
--- a/proposal/sandbox/input/src/main/org/apache/tools/ant/input/SwingInputHandler.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.input;
-
-import org.apache.tools.ant.BuildException;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.*;
-import java.util.Vector;
-
-/**
- * Very, very, very simplistic GUI input handler, nothing more than a
- * proof of concept.
- *
- * <p>I don't intend to commit this to the main branch if my proposal
- * should get accepted.</p>
- *
- * <p>I guess I can use this code to demonstrate why nobody should
- * hire me to do GUI stuff 8-)</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class SwingInputHandler implements InputHandler {
-
-    private Component inputComponent;
-    private boolean done = false;
-
-    public SwingInputHandler() {
-    }
-
-    public synchronized void handleInput(final InputRequest request) 
-        throws BuildException {
-        final JFrame frame = new JFrame();
-        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
-        Container cp = frame.getContentPane();
-        cp.setLayout(new BorderLayout());
-        
-        JPanel p = new JPanel();
-        p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
-        p.add(new JLabel(request.getPrompt()));
-        if (request instanceof MultipleChoiceInputRequest) {
-            JComboBox c = new JComboBox(((MultipleChoiceInputRequest) request).getChoices());
-            c.setEditable(false);
-            p.add(c);
-            inputComponent = c;
-        } else {
-            p.add((inputComponent = new JTextField(20)));
-        }
-        
-        cp.add(p, BorderLayout.CENTER);
-        JButton button = new JButton("OK");
-        button.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent e) {
-                    request.setInput(getInput());
-                    frame.dispose();
-                    synchronized (SwingInputHandler.this) {
-                        SwingInputHandler.this.done = true;
-                        SwingInputHandler.this.notifyAll();
-                    }
-                }
-            });
-        cp.add(button, BorderLayout.SOUTH);
-        frame.pack();
-        frame.show();
-
-        while (!done) {
-            try {
-                wait();
-            } catch (InterruptedException e) {}
-        }
-        done = false;
-    }
-
-    private String getInput() {
-        if (inputComponent instanceof JTextField) {
-            return ((JTextField) inputComponent).getText();
-        } else {
-            return ((JComboBox) inputComponent).getSelectedItem().toString();
-        }
-    }
-}
diff --git a/proposal/sandbox/input/src/main/org/apache/tools/ant/taskdefs/Input.java b/proposal/sandbox/input/src/main/org/apache/tools/ant/taskdefs/Input.java
deleted file mode 100644
index 605b171..0000000
--- a/proposal/sandbox/input/src/main/org/apache/tools/ant/taskdefs/Input.java
+++ /dev/null
@@ -1,149 +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.StringTokenizer;
-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;
-
-/**
- * Ant task to read input line from console.
- *
- * @author <a href="mailto:usch@usch.net">Ulrich Schmidt</a>
- */
-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 = new Vector();
-            StringTokenizer stok = new StringTokenizer(validargs, ",", false);
-            while (stok.hasMoreTokens()) {
-                accept.addElement(stok.nextToken());
-            }
-            request = new MultipleChoiceInputRequest(message, accept);
-        } else {
-            request = new InputRequest(message);
-        }
-
-        getProject().getInputHandler().handleInput(request);
-
-        if (addproperty != null) {
-            if (project.getProperty(addproperty) == null) {
-                project.setProperty(addproperty, request.getInput());
-            } else {
-                log("Override ignored for " + addproperty,
-                    Project.MSG_VERBOSE);
-            }
-        }
-    }
-
-}
diff --git a/proposal/sandbox/input/src/testcases/fails.properties b/proposal/sandbox/input/src/testcases/fails.properties
deleted file mode 100644
index 368b6e1..0000000
--- a/proposal/sandbox/input/src/testcases/fails.properties
+++ /dev/null
@@ -1 +0,0 @@
-This\ is\ a\ prompt\ =3
diff --git a/proposal/sandbox/input/src/testcases/input.xml b/proposal/sandbox/input/src/testcases/input.xml
deleted file mode 100644
index c4f8e96..0000000
--- a/proposal/sandbox/input/src/testcases/input.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<project name="manual-test-for-input" default="both">
-  <target name="single">
-    <input addproperty="single" message="This is a prompt" />
-    <echo>$${single} is ${single}</echo>
-  </target>
-
-  <target name="multi">
-    <input addproperty="multi" 
-           message="This is a prompt " 
-           validargs="1,2" />
-    <echo>$${multi} is ${multi}</echo>
-  </target>
-
-  <target name="both" depends="single,multi" />
-</project>
diff --git a/proposal/sandbox/input/src/testcases/org/apache/tools/ant/taskdefs/InputTest.java b/proposal/sandbox/input/src/testcases/org/apache/tools/ant/taskdefs/InputTest.java
deleted file mode 100644
index 51f6e4e..0000000
--- a/proposal/sandbox/input/src/testcases/org/apache/tools/ant/taskdefs/InputTest.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;
-
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.input.PropertyFileInputHandler;
-
-/**
- * @author Ulrich Schmidt <usch@usch.net>
- */
-public class InputTest extends BuildFileTest {
-
-    public InputTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        System.getProperties().put(PropertyFileInputHandler.FILE_NAME_KEY,
-                                   "src/etc/testcases/taskdefs/input.properties");
-        configureProject("src/etc/testcases/taskdefs/input.xml");
-        getProject().setInputHandler(new PropertyFileInputHandler());
-    }
-
-    public void test1() {
-        executeTarget("test1");
-    }
-
-    public void test2() {
-        executeTarget("test1");
-    }
-
-    public void test3() {
-        try {
-            executeTarget("test3");
-            fail("Input for \"All data is going to be deleted from DB continue?\" should be invalid");
-        } catch (org.apache.tools.ant.BuildException e) {
-            assertEquals("Found invalid input test for All data is going to be deleted from DB continue?", 
-                         e.getMessage());
-        }
-    }
-
-    public void test5() {
-        executeTarget("test5");
-    }
-
-    public void test6() {
-        executeTarget("test6");
-        assertEquals("scott", project.getProperty("db.user"));
-    }
-
-}
diff --git a/proposal/sandbox/input/src/testcases/works.properties b/proposal/sandbox/input/src/testcases/works.properties
deleted file mode 100644
index ff07b57..0000000
--- a/proposal/sandbox/input/src/testcases/works.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-This\ is\ a\ prompt\ =2
-This\ is\ a\ prompt=Hi there
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/avalon-excalibur-20011230.jar b/proposal/sandbox/junit/lib/avalon-excalibur-20011230.jar
deleted file mode 100644
index 988c073..0000000
--- a/proposal/sandbox/junit/lib/avalon-excalibur-20011230.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 ccdb516..0000000
--- a/proposal/xdocs/build.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" ?>
-<project name="XDoclet" default="main">
-
-  <property name="log4j.jar" location="../../lib/optional/log4j.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.1.1.jar b/proposal/xdocs/dvsl/lib/dom4j-1.1.1.jar
deleted file mode 100644
index a3c1bf5..0000000
--- a/proposal/xdocs/dvsl/lib/dom4j-1.1.1.jar
+++ /dev/null
Binary files differ
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/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 2e98456..0000000
--- a/proposal/xdocs/src/org/apache/tools/ant/xdoclet/DatatypeSubTask.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.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/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/ant.spec b/src/etc/ant.spec
deleted file mode 100644
index 95d744a..0000000
--- a/src/etc/ant.spec
+++ /dev/null
@@ -1,55 +0,0 @@
-%define	packname    jakarta-ant
-%define	applibdir   /usr/share/ant
-%define dist_tar    @DIST_TAR@
-
-Summary: A Java based build tool.
-Name: ant
-Version: @VERSION@
-Release: @RPM_RELEASE@
-Group: Development/Tools
-Copyright: Apache Software License
-Provides: ant
-Url: http://jakarta.apache.org/ant
-BuildArch: noarch
-Source: http://jakarta.apache.org/builds/jakarta-ant/@RPM_SOURCE@/src/%{packname}-%{version}-src.tar.gz
-BuildRoot: /var/tmp/ant-root
-Vendor: Apache Software Foundation
-Packager: Apache Software Foundation
-
-%description
-Apache Ant is a platform-independent build tool implemented in Java.
-It is used to build a number of projects including the Apache Jakarta 
-and XML projects.
-
-%prep
-
-%build
-
-%install
-mkdir -p $RPM_BUILD_ROOT/%{applibdir}
-cd $RPM_BUILD_ROOT
-tar zxvf %{dist_tar}
-cp -r $RPM_BUILD_ROOT/%{packname}-%{version}/bin $RPM_BUILD_ROOT/%{applibdir}
-cp -r $RPM_BUILD_ROOT/%{packname}-%{version}/lib $RPM_BUILD_ROOT/%{applibdir}
-cp -r $RPM_BUILD_ROOT/%{packname}-%{version}/docs $RPM_BUILD_DIR 
-cp -r $RPM_BUILD_ROOT/%{packname}-%{version}/LICENSE $RPM_BUILD_DIR 
-cp -r $RPM_BUILD_ROOT/%{packname}-%{version}/README $RPM_BUILD_DIR 
-cp -r $RPM_BUILD_ROOT/%{packname}-%{version}/KEYS $RPM_BUILD_DIR
-cp -r $RPM_BUILD_ROOT/%{packname}-%{version}/WHATSNEW $RPM_BUILD_DIR
-
-%clean
-[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
-
-%post
-
-%preun
-  
-%files
-%defattr(-,root,root)
-%doc LICENSE README WHATSNEW KEYS
-%doc docs
-%{applibdir}/lib
-%{applibdir}/bin
-
-
-%changelog
diff --git a/src/etc/antsrc.spec b/src/etc/antsrc.spec
deleted file mode 100644
index b7375a0..0000000
--- a/src/etc/antsrc.spec
+++ /dev/null
@@ -1,54 +0,0 @@
-%define	packname    jakarta-ant
-%define	applibdir   /usr/share/ant
-%define manualdir   /usr/share/doc/%{name}
-
-Summary: A Java based build tool.
-Name: ant
-Version: @VERSION@
-Release: @RPM_RELEASE@
-Group: Development/Tools
-Copyright: Apache Software License
-Provides: ant
-Url: http://jakarta.apache.org/ant
-BuildArch: noarch
-Source: http://jakarta.apache.org/builds/jakarta-ant/@RPM_SOURCE@/src/%{packname}-%{version}-src.tar.gz
-BuildRoot: /var/tmp/ant-root
-Vendor: Apache Software Foundation
-Packager: Apache Software Foundation
-
-%description
-Apache Ant is a platform-independent build tool implemented in Java.
-It is used to build a number of projects including the Apache Jakarta 
-and XML projects.
-
-%prep
-%setup -n %{packname}-%{version}
-
-%build
-sh build.sh
-
-%install
-mkdir -p $RPM_BUILD_ROOT
-export ANT_HOME=$RPM_BUILD_ROOT/%{applibdir} 
-sh build.sh install 
-cp -r $RPM_BUILD_ROOT/%{applibdir}/docs $RPM_BUILD_DIR
-cp -r $RPM_BUILD_ROOT/%{applibdir}/LICENSE $RPM_BUILD_DIR
-cp -r $RPM_BUILD_ROOT/%{applibdir}/README $RPM_BUILD_DIR
-cp -r $RPM_BUILD_ROOT/%{applibdir}/WHATSNEW $RPM_BUILD_DIR
-cp -r $RPM_BUILD_ROOT/%{applibdir}/KEYS $RPM_BUILD_DIR
-
-%clean
-[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
-
-%post
-
-%preun
-  
-%files
-%defattr(-,root,root)
-%doc LICENSE README WHATSNEW KEYS
-%doc docs
-%{applibdir}/lib
-%{applibdir}/bin
-
-%changelog
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 a49b790..0000000
--- a/src/etc/jdepend-frames.xsl
+++ /dev/null
@@ -1,541 +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) 2002 The Apache Software Foundation.  All rights
- reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-        Apache Software Foundation (http://www.apache.org/)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
- 4. The names "The Jakarta Project", "Ant", and "Apache Software
-    Foundation" must not be used to endorse or promote products derived
-    from this software without prior written permission. For written
-    permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache"
-    nor may "Apache" appear in their names without prior written
-    permission of the Apache Group.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- ====================================================================
-
- This software consists of voluntary contributions made 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>
-
-   <!-- 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="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>
-         <xsl:call-template name="create.stylesheet.link">
-         </xsl:call-template>
-      </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="format-number(Stats/A, '0%')"/></td>
-                     <td align="right"><xsl:value-of select="format-number(Stats/I, '0%')"/></td>
-                     <td align="right"><xsl:value-of select="format-number(Stats/D, '0%')"/></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>
-         <xsl:call-template name="create.stylesheet.link">
-         </xsl:call-template>
-      </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="format-number(Stats/A, '0%')"/></td>
-        <td><a href="overview-explanations.html#EXinstability">Instability</a>: <xsl:value-of select="format-number(Stats/I, '0%')"/></td>
-        <td><a href="overview-explanations.html#EXdistance">Distance</a>: <xsl:value-of select="format-number(Stats/D, '0%')"/></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>
-         <xsl:call-template name="create.stylesheet.link">
-         </xsl:call-template>
-      </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>
-         <xsl:call-template name="create.stylesheet.link">
-         </xsl:call-template>
-      </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>
-      <xsl:call-template name="create.stylesheet.link">
-      </xsl:call-template>
-    </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>
-      <xsl:call-template name="create.stylesheet.link">
-      </xsl:call-template>
-    </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>
-    
-<!-- create the link to the stylesheet based on the package name -->
-<xsl:template name="create.stylesheet.link">
-  <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href">stylesheet.css</xsl:attribute></link>
-</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 97dd0f9..0000000
--- a/src/etc/jdepend.xsl
+++ /dev/null
@@ -1,258 +0,0 @@
-<xsl:stylesheet	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="html" indent="yes"/>
-<xsl:decimal-format decimal-separator="." grouping-separator="," />
-
-<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="format-number(Stats/A, '0%')"/></td>
-				<td align="right"><xsl:value-of select="format-number(Stats/I, '0%')"/></td>
-				<td align="right"><xsl:value-of select="format-number(Stats/D, '0%')"/></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="format-number(Stats/A, '0%')"/></td>
-				<td><a href="#EXinstability">Instability</a>: <xsl:value-of select="format-number(Stats/I, '0%')"/></td>
-				<td><a href="#EXdistance">Distance</a>: <xsl:value-of select="format-number(Stats/D, '0%')"/></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 815e6e0..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"/>
-<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 eeba253..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"/>
-<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 28771db..0000000
--- a/src/etc/log.xsl
+++ /dev/null
@@ -1,246 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="html" indent="yes"/>
-<!--
- 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/>.
- -->
- 
-<!--
-
-  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">
-  <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>
\ No newline at end of file
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 37f7519..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"/>
-<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 35f7799..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"/>
-<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/pkginfo b/src/etc/pkginfo
deleted file mode 100644
index cad2925..0000000
--- a/src/etc/pkginfo
+++ /dev/null
@@ -1,9 +0,0 @@
-PKG="ASFant"
-NAME="Apache Ant build tool"
-VERSION="1.0"
-ARCH="sparc i386"
-CLASSES="none"
-CATEGORY="utility"
-VENDOR="Apache"
-EMAIL="costin@eng.sun.com"
-BASEDIR=/
diff --git a/src/etc/prototype b/src/etc/prototype
deleted file mode 100644
index abd374b..0000000
--- a/src/etc/prototype
+++ /dev/null
@@ -1,12 +0,0 @@
-i pkginfo
-d none /opt/ant 0755 costin other
-d none /opt/ant/lib 0755 costin staff
-f none /opt/ant/lib/ant.jar 0644 costin staff
-f none /opt/ant/lib/xml.jar 0644 costin staff
-f none /opt/ant/lib/moo.jar 0644 costin staff
-f none /opt/ant/lib/build.xml 0644 costin staff
-d none /opt/ant/bin 0755 costin staff
-f none /opt/ant/bin/ant 0755 costin staff
-f none /opt/ant/bin/antRun 0755 costin staff
-d none /opt/ant/docs 0755 costin staff
-f none /opt/ant/docs/index.html 0644 costin staff
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/ant.xml b/src/etc/testcases/taskdefs/ant.xml
deleted file mode 100644
index 3a0262d..0000000
--- a/src/etc/testcases/taskdefs/ant.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="ant-test" basedir="." default="test1">
-
-  <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>
-
-</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 1b28568..0000000
--- a/src/etc/testcases/taskdefs/available.xml
+++ /dev/null
@@ -1,106 +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>
-
-</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/condition.xml b/src/etc/testcases/taskdefs/condition.xml
deleted file mode 100644
index 1278f09..0000000
--- a/src/etc/testcases/taskdefs/condition.xml
+++ /dev/null
@@ -1,219 +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="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 712970e..0000000
--- a/src/etc/testcases/taskdefs/copy.xml
+++ /dev/null
@@ -1,67 +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="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 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/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.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.xml b/src/etc/testcases/taskdefs/input.xml
deleted file mode 100644
index e9d3fcf..0000000
--- a/src/etc/testcases/taskdefs/input.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="input-test" basedir="." default="test1">
-
-  <target name="test1">
-    <input testinput="test">Press Return key to continue...</input>
-  </target>
-
-  <target name="test2">
-    <input testinput="test"
-           message="Press Return key to continue..."
-           />
-  </target>
-
-  <target name="test3">
-    <input testinput="test"
-           message="All data is going to be deleted from DB continue (y/n)?"
-           validargs="y,n"
-           />
-  </target>
-
-  <target name="test5">
-    <input testinput="y"
-           message="All data is going to be deleted from DB continue (y/n)?"
-           validargs="y,n"
-           />
-  </target>
-
-  <target name="test6">
-    <input testinput="scott"
-           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 f8dbc6d..0000000
--- a/src/etc/testcases/taskdefs/java.xml
+++ /dev/null
@@ -1,85 +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="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 e57c02d..0000000
--- a/src/etc/testcases/taskdefs/loadfile.xml
+++ /dev/null
@@ -1,81 +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"
-        evaluateProperties="true"
-        />
-    <echo>${testLoadAFile}</echo>
-  </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"
-        makeOneLine="true"
-        />
-    <echo>${testLoadAFile}</echo>
-  </target>
-
-
-  <target name="cleanup">
-    <delete file="loadfile1.tmp"/>
-  </target>
-
-  </project>
diff --git a/src/etc/testcases/taskdefs/manifest.xml b/src/etc/testcases/taskdefs/manifest.xml
deleted file mode 100644
index d94db08..0000000
--- a/src/etc/testcases/taskdefs/manifest.xml
+++ /dev/null
@@ -1,149 +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="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 6d584c3..0000000
--- a/src/etc/testcases/taskdefs/move.xml
+++ /dev/null
@@ -1,18 +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="cleanup"> 
-    <delete file="move.filterset.tmp"/>
-  </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 2b1fc61..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 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/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/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/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 5e16041..0000000
--- a/src/etc/testcases/taskdefs/optional/jspc.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="jspc-test" default="main" basedir=".">
-
-   <target name="main" depends="simple,missing_tld,uriroot,xml">
-   </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="missing_tld" 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="simple" 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="uriroot" 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="xml" depends="init">
-      <jspc
-        destdir="${jsp.output.dir}"
-        uriroot="${jsp.dir}"
-        srcdir="${jsp.dir}"
-        verbose="${jsp.verbosity}">
-          <include name="xml.jsp"/>
-      </jspc>
-   </target>
-   
-</project>
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/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/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 58b56be..0000000
--- a/src/etc/testcases/taskdefs/tar.xml
+++ /dev/null
@@ -1,74 +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="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"/>
-  </target>
-
-  <target name="feather">
-    <tar destfile="asf-logo.gif.tar"
-         basedir=".."
-         includes="asf-logo.gif" />
-  </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 575240d..0000000
--- a/src/etc/testcases/taskdefs/untar.xml
+++ /dev/null
@@ -1,23 +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="realTest">
-    <untar src="expected/asf-logo.gif.tar" dest="." />
-  </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/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/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 621f7c5..0000000
--- a/src/main/org/apache/tools/ant/AntClassLoader.java
+++ /dev/null
@@ -1,1182 +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;
-
-/**
- * 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 <a href="mailto:conor@cortexebusiness.com.au">Conor MacNeill</a>
- * @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 final static int BUFFER_SIZE = 8192;
-
-    /**
-     * The components of the classpath that the classloader searches
-     * for classes.
-     */
-    // XXX: Any reason this shouldn't be 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;
-
-    /**
-     * Reflection method reference for getContextClassLoader;
-     * used to avoid 1.1-compatibility problems.
-     */
-    private static Method getContextClassLoader = null;
-
-    /**
-     * Reflection method reference for setContextClassLoader;
-     * used to avoid 1.1-compatibility problems.
-     */
-    private static Method setContextClassLoader = 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);
-
-            getContextClassLoader = Thread.class.getMethod("getContextClassLoader", new Class[0]);
-            args = new Class[] {ClassLoader.class};
-            setContextClassLoader = Thread.class.getMethod("setContextClassLoader", args);
-        }
-        catch (Exception e) {}
-    }
-
-
-    /**
-     * 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 (getContextClassLoader != null && setContextClassLoader != null) {
-            try {
-                savedContextLoader
-                    = (ClassLoader)getContextClassLoader.invoke(Thread.currentThread(), new Object[0]);
-                Object[] args = new Object[] {this};
-                setContextClassLoader.invoke(Thread.currentThread(), args);
-                isContextLoaderSaved = true;
-            }
-            catch (InvocationTargetException ite) {
-                Throwable t = ite.getTargetException();
-                throw new BuildException(t.toString());
-            }
-            catch (Exception e) {
-                throw new BuildException(e.toString());
-            }
-        }
-    }
-
-    /**
-     * Resets the current thread's context loader to its original value.
-     */
-    public void resetThreadContextLoader() {
-        if (isContextLoaderSaved &&
-                getContextClassLoader != null && setContextClassLoader != null) {
-            try {
-                Object[] args = new Object[] {savedContextLoader};
-                setContextClassLoader.invoke(Thread.currentThread(), args);
-                savedContextLoader = null;
-                isContextLoaderSaved = false;
-            }
-            catch (InvocationTargetException ite) {
-                Throwable t = ite.getTargetException();
-                throw new BuildException(t.toString());
-            }
-            catch (Exception e) {
-                throw new BuildException(e.toString());
-            }
-        }
-    }
-
-
-    /**
-     * 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;
-
-        for (Enumeration e = pathComponents.elements(); 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.
-            for (Enumeration e = pathComponents.elements(); 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.
-     */
-    private Class getClassFromStream(InputStream stream, String classname)
-                throws IOException {
-        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 {
-                    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 {
-            for (Enumeration e = pathComponents.elements(); e.hasMoreElements(); ) {
-                File pathComponent = (File)e.nextElement();
-                try {
-                    stream = getResourceStream(pathComponent, classFilename);
-                    if (stream != null) {
-                        return getClassFromStream(stream, name);
-                    }
-                }
-                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.
-     */
-    public void buildStarted(BuildEvent event) {
-    }
-
-    /**
-     * Cleans up any resources held by this classloader at the end
-     * of a build.
-     */
-    public void buildFinished(BuildEvent event) {
-        cleanup();
-    }
-
-    /**
-     * 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/BuildEvent.java b/src/main/org/apache/tools/ant/BuildEvent.java
deleted file mode 100644
index 1615b64..0000000
--- a/src/main/org/apache/tools/ant/BuildEvent.java
+++ /dev/null
@@ -1,235 +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.
- */
-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 ef24fee..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 msg A description of or information about the exception.
-     *            Should not be <code>null</code>.
-     */
-    public BuildException(String msg) {
-        super(msg);
-    }
-
-    /**
-     * Constructs an exception with the given message and exception as
-     * a root cause.
-     * 
-     * @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>.
-     */
-    public BuildException(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 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 msg 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 msg, Location location) {
-        super(msg);
-        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 2d2d6cb..0000000
--- a/src/main/org/apache/tools/ant/BuildListener.java
+++ /dev/null
@@ -1,140 +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)
- */
-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 c2af64a..0000000
--- a/src/main/org/apache/tools/ant/DefaultLogger.java
+++ /dev/null
@@ -1,311 +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.text.ChoiceFormat;
-import java.text.MessageFormat;
-
-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.
- */
-public class DefaultLogger implements BuildLogger {
-    /** 
-     * Size of left-hand column for right-justified task name.
-     * @see #messageLogged(BuildEvent)
-     */
-    private static 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 final static 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(StringUtils.LINE_SEP);
-                }
-                else {
-                    message.append(error.getMessage()).append(StringUtils.LINE_SEP);
-                }
-            }
-        }
-        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();
-            // Print out the name of the task if we're in one
-            if (event.getTask() != null) {
-                String name = event.getTask().getTaskName();
-
-                if (!emacsMode) {
-                    String label = "[" + name + "] ";
-                    for (int i = 0; i < (LEFT_COLUMN_SIZE - label.length()); i++) {
-                        message.append(" ");
-                    }
-                    message.append(label);
-                }
-            }
-
-            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.
-     * 
-     * @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 1e60c2f..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 final static 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 8432850..0000000
--- a/src/main/org/apache/tools/ant/DirectoryScanner.java
+++ /dev/null
@@ -1,1098 +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;
-
-/**
- * Class for scanning a directory for files/directories which match 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 which match at least one
- * pattern of the include pattern list, and don't match any 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).
- * 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>
- */
-public class DirectoryScanner implements FileScanner {
-
-    /**
-     * Patterns which should be excluded by default.
-     *
-     * @see #addDefaultExcludes()
-     */
-    protected final static 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;
-
-    /** The files which matched at least one include and no excludes. */
-    protected Vector filesIncluded;
-
-    /** The files which did not match any includes. */
-    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. */
-    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;
-
-    /** 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 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 "**".
-     */
-    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 = 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.
-     */
-    protected 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.
-     */
-    protected 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.
-     */
-    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;
-    }
-
-    /**
-     * 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) {
-        Vector ret = new Vector();
-        StringTokenizer st = new StringTokenizer(path,File.separator);
-        while (st.hasMoreTokens()) {
-            ret.addElement(st.nextToken());
-        }
-        return ret;
-    }
-    
-    /**
-     * 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;
-            }
-        }
-    }
-
-    /**
-     * 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.
-     *
-     * @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() {
-        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();
-        dirsIncluded     = new Vector();
-        dirsNotIncluded  = new Vector();
-        dirsExcluded     = new Vector();
-
-        if (isIncluded("")) {
-            if (!isExcluded("")) {
-                dirsIncluded.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 and excludes. 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)) {
-                        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 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;
-    }
-
-    /**
-     * 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 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;
-    }
-
-    /**
-     * 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/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 e322481..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();
-    
-    /**
-     * 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 aaba3cd..0000000
--- a/src/main/org/apache/tools/ant/IntrospectionHelper.java
+++ /dev/null
@@ -1,870 +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.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 &&
-                (
-                 (
-                  "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) {
-                }
-            }
-        }
-    }
-
-    /**
-     * 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) {
-            String msg = p.getElementName(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 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) {
-        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) {
-            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.
-     */
-    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 1c35064..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 final static 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 16c65ef..0000000
--- a/src/main/org/apache/tools/ant/Main.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;
-
-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 final static 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 PrintStream out = System.out;
-
-    /** Stream that we are using for logging error messages. */
-    private 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;
-
-    /**
-     * 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;
-
-    /**
-     * 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);
-        }
-    }
-                                        
-    /**
-     * 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);
-                } 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("-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);
-
-            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 ( !Project.JAVA_1_0.equals(Project.getJavaVersion()) &&
-                !Project.JAVA_1_1.equals(Project.getJavaVersion()) ){
-                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() );
-                
-                // first use the ProjectHelper to create the project object
-                // from the given build file.
-                String noParserMessage = 
-                    "No JAXP compliant XML parser found. Please visit http://xml.apache.org for a suitable parser";
-                try {
-                    Class.forName("javax.xml.parsers.SAXParserFactory");
-                    ProjectHelper.configureProject(project, buildFile);
-                } catch (NoClassDefFoundError ncdfe) {
-                    throw new BuildException(noParserMessage, ncdfe);
-                } catch (ClassNotFoundException cnfe) {
-                    throw new BuildException(noParserMessage, cnfe);
-                } catch (NullPointerException npe) {
-                    throw new BuildException(noParserMessage, npe);
-                }
-
-                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);
-            }
-        }
-    }
-
-    // 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.
-     */
-    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("  -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
-     */
-    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 0fa98ba..0000000
--- a/src/main/org/apache/tools/ant/NoBannerLogger.java
+++ /dev/null
@@ -1,119 +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>. */
-    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 4b35543..0000000
--- a/src/main/org/apache/tools/ant/PathTokenizer.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;
-
-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 (conor@ieee.org)
- *
- */ 
-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 f78a69a..0000000
--- a/src/main/org/apache/tools/ant/Project.java
+++ /dev/null
@@ -1,1858 +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; 
-
-/**
- * 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 final static int MSG_ERR = 0;
-    /** Message priority of "warning". */
-    public final static int MSG_WARN = 1;
-    /** Message priority of "information". */
-    public final static int MSG_INFO = 2;
-    /** Message priority of "verbose". */
-    public final static int MSG_VERBOSE = 3;
-    /** Message priority of "debug". */
-    public final static int MSG_DEBUG = 4;
-
-    /** 
-     * Constant for the "visiting" state, used when
-     * traversing a DFS of target dependencies.
-     */
-    private final static String VISITING = "VISITING";
-    /** 
-     * Constant for the "visited" state, used when
-     * traversing a DFS of target dependencies.
-     */
-    private final static String VISITED = "VISITED";
-
-    /** Version of currently running VM. */
-    private static String javaVersion;
-
-    /** Version constant for Java 1.0 */
-    public final static String JAVA_1_0 = "1.0";
-    /** Version constant for Java 1.1 */
-    public final static String JAVA_1_1 = "1.1";
-    /** Version constant for Java 1.2 */
-    public final static String JAVA_1_2 = "1.2";
-    /** Version constant for Java 1.3 */
-    public final static String JAVA_1_3 = "1.3";
-    /** Version constant for Java 1.4 */
-    public final static String JAVA_1_4 = "1.4";
-
-    /** Default filter start token. */
-    public final static String TOKEN_START = FilterSet.DEFAULT_TOKEN_START;
-    /** Default filter end token. */
-    public final static 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();
-    
-    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
-        }
-    }
-
-    /** Instance of a utility class to use for file operations. */
-    private FileUtils fileUtils;
-
-    /**
-     * Creates a new Ant project.
-     */
-    public Project() {
-        fileUtils = FileUtils.newFileUtils();
-    }
-    
-    /**
-     * 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 msg The text to log. Should not be <code>null</code>.
-     */
-     
-    public void log(String msg) {
-        log(msg, MSG_INFO);
-    }
-
-    /**
-     * Writes a project level message to the log with the given log level.
-     * @param msg The text to log. Should not be <code>null</code>.
-     * @param msgLevel The priority level to log at.
-     */
-    public void log(String msg, int msgLevel) {
-        fireMessageLogged(this, msg, 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 msg The text to log. Should not be <code>null</code>.
-     * @param msgLevel The priority level to log at.
-     */
-    public void log(Task task, String msg, int msgLevel) {
-        fireMessageLogged(task, msg, 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 msg The text to log. Should not be <code>null</code>.
-     * @param msgLevel The priority level to log at.
-     */
-    public void log(Target target, String msg, int msgLevel) {
-        fireMessageLogged(target, msg, 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).
-     */
-    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>.
-     * @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"
-     */
-    public static String getJavaVersion() {
-        return javaVersion;
-    }
-
-    /**
-     * 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 #getJavaVersion()
-     */
-    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);
-    }
-
-    /**
-     * 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.
-     * 
-     * @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 taskClass 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) {
-        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.
-     *
-     * @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>.
-     */
-    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 
-     *
-     * @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 copying fails
-     *
-     * @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>.
-     *
-     * @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 (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 
-     * <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) {
-        if (null != references.get(name)) {
-            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.
-        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);
-        }
-    }
-
-    /**
-     * 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) {
-        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);
-        }
-    }
-
-    /**
-     * 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);
-    }
-}
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 da1c3aa..0000000
--- a/src/main/org/apache/tools/ant/ProjectComponent.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;
-
-/**
- * Base class for components of a project, including tasks and data types.
- * Provides common facilities.
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- */
-
-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 227be5b..0000000
--- a/src/main/org/apache/tools/ant/ProjectHelper.java
+++ /dev/null
@@ -1,1394 +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 org.xml.sax.helpers.XMLReaderAdapter;
-
-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
- * an XML build file.
- *
- * @author duncan@x180.com
- */
-
-public class ProjectHelper {
-
-    /** 
-     * Parser factory to use to create parsers.
-     * @see #getParserFactory
-     */
-    private static SAXParserFactory parserFactory = null;
-
-    /**
-     * 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;
-
-    /**
-     * 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 {
-        new ProjectHelper(project, buildFile).parse();
-    }
-
-    /**
-     * Constructs a new helper for the specified project and XML file.
-     * 
-     * @param project The project for the resulting ProjectHelper to configure. 
-     *                Must not be <code>null</code>.
-     * @param buildFile An XML file giving the project's configuration.
-     *                  Must not be <code>null</code>.
-     */
-    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, configuring the project as it goes.
-     * 
-     * @exception BuildException if the configuration is invalid or cannot 
-     *                           be read
-     */
-    private void parse() throws BuildException {
-        FileInputStream inputStream = null;
-        InputSource inputSource = null;
-        
-        try {
-            SAXParser saxParser = getParserFactory().newSAXParser();
-            try {
-                parser = saxParser.getParser();
-            } catch (SAXException exc) {
-                parser = new XMLReaderAdapter(saxParser.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();
-            parser.setDocumentHandler(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(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.
-     */
-    private class AbstractHandler extends HandlerBase {
-        
-        /** 
-         * Previous handler for the document. 
-         * When the next element is finished, control returns
-         * to this handler.
-         */
-        protected DocumentHandler parentHandler;
-        
-        /**
-         * Creates a handler and sets the parser to use it
-         * for the current element.
-         * 
-         * @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(DocumentHandler parentHandler) {
-            this.parentHandler = parentHandler;
-
-            // Start handling SAX events
-            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 + "\"", 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 + "\"", 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
-            parser.setDocumentHandler(parentHandler);
-        }
-    }
-
-    /**
-     * Handler for the root element. Its only child must be the "project" element.
-     */
-    private class RootHandler extends HandlerBase {
-
-        /**
-         * 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) {
-        
-            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;
-        }
-
-        /**
-         * 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(this).init(tag, attrs);
-            } else {
-                throw new SAXParseException("Config file is not of expected XML type", 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) {
-            ProjectHelper.this.locator = locator;
-        }
-    }
-
-    /**
-     * Handler for the top level "project" element.
-     */
-    private 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(DocumentHandler parentHandler) {
-            super(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) + "\"", 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));
-                    }
-                }
-            }
-
-        }
-
-        /**
-         * 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 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 (project.getDataTypeDefinitions().get(name) != null) {
-                handleDataType(name, attrs);
-            } else {
-                throw new SAXParseException("Unexpected element \"" + name + "\"", locator);
-            }
-        }
-        
-        /**
-         * Handles a task defintion element by creating a task 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 when initialising 
-         *                              the task handler
-         *                          
-         */
-        private void handleTaskdef(String name, AttributeList attrs) throws SAXParseException {
-            (new TaskHandler(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 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 handleTypedef(String name, AttributeList attrs) throws SAXParseException {
-            (new TaskHandler(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 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 handleProperty(String name, AttributeList attrs) throws SAXParseException {
-            (new TaskHandler(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(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 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 handleDataType(String name, AttributeList attrs) throws SAXParseException {
-            new DataTypeHandler(this).init(name, attrs);
-        }
-
-    }
-
-    /**
-     * Handler for "target" elements.
-     */
-    private 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(DocumentHandler parentHandler) {
-            super(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 + "\"", 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);
-            }
-        }
-
-        /**
-         * 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 void startElement(String name, AttributeList attrs) throws SAXParseException {
-            if (project.getDataTypeDefinitions().get(name) != null) {
-                new DataTypeHandler(this, target).init(name, attrs);
-            } else {
-                new TaskHandler(this, target, null, target).init(name, attrs);
-            }
-        }
-    }
-
-    /**
-     * Handler for all task elements.
-     */
-    private 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(DocumentHandler parentHandler, TaskContainer container, RuntimeConfigurable parentWrapper, Target target) {
-            super(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 = 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(project);
-                task.setTaskType(tag);
-                task.setTaskName(tag);
-            }
-
-            task.setLocation(new Location(buildFile.toString(), locator.getLineNumber(), locator.getColumnNumber()));
-            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, 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 {
-                    addText(project, task, buf, start, count);
-                } catch (BuildException exc) {
-                    throw new SAXParseException(exc.getMessage(), 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 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 {
-        /** 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(DocumentHandler parentHandler, 
-                                    Object parent,
-                                    RuntimeConfigurable parentWrapper,
-                                    Target target) {
-            super(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 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 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);
-                    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);
-            }
-        }
-
-        /**
-         * 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 {
-                    addText(project, child, buf, start, count);
-                } catch (BuildException exc) {
-                    throw new SAXParseException(exc.getMessage(), 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 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 for all data types directly subordinate to project or target.
-     */
-    private 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(DocumentHandler parentHandler) {
-            this(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(DocumentHandler parentHandler, Target target) {
-            super(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 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 init(String propType, AttributeList attrs) throws SAXParseException {
-            try {
-                element = 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, project);
-                    configureId(element, attrs);
-                }
-            } catch (BuildException exc) {
-                throw new SAXParseException(exc.getMessage(), 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 {
-                addText(project, element, buf, start, count);
-            } catch (BuildException exc) {
-                throw new SAXParseException(exc.getMessage(), 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 void startElement(String name, AttributeList attrs) throws SAXParseException {
-            new NestedElementHandler(this, element, wrapper, target).init(name, attrs);
-        }
-    }
-
-    /**
-     * 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 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;
-        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));
-        }
-    }
-
-    /**
-     * Returns the parser factory to use. Only one parser
-     * factory is ever created by this method (multi-threading 
-     * issues aside) and is then cached for future use.
-     * 
-     * @return a SAXParserFactory to use within this class
-     */
-    private static SAXParserFactory getParserFactory() {
-        if (parserFactory == null) {
-            parserFactory = SAXParserFactory.newInstance();
-        }
-
-        return parserFactory;
-    }
-
-    /**
-     * 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/RuntimeConfigurable.java b/src/main/org/apache/tools/ant/RuntimeConfigurable.java
deleted file mode 100644
index 6787a46..0000000
--- a/src/main/org/apache/tools/ant/RuntimeConfigurable.java
+++ /dev/null
@@ -1,227 +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 148a81d..0000000
--- a/src/main/org/apache/tools/ant/Target.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;
-
-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 135d35f..0000000
--- a/src/main/org/apache/tools/ant/Task.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;
-
-/**
- * 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.
-     */
-    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.
-     */
-    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 06b5162..0000000
--- a/src/main/org/apache/tools/ant/TaskAdapter.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;
-
-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. */
-    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.
-     */
-    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 e8a47c7..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- */
-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 b997ced..0000000
--- a/src/main/org/apache/tools/ant/UnknownElement.java
+++ /dev/null
@@ -1,352 +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>.
-     * @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>.
-     */
-    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 An t 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 62d4f20..0000000
--- a/src/main/org/apache/tools/ant/XmlLogger.java
+++ /dev/null
@@ -1,386 +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.Writer;
-import java.io.OutputStreamWriter;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-
-import java.util.Hashtable;
-import java.util.Stack;
-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.util.DOMElementWriter;
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * 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 BuildListener {
-
-    /** DocumentBuilder to use when creating the document to start with. */
-    private final static DocumentBuilder builder = getDocumentBuilder();
-
-    /** 
-     * Returns a default DocumentBuilder instance or throws an
-     * ExceptionInInitializerError if it can't be created.
-     */
-    private static DocumentBuilder getDocumentBuilder() {
-        try {
-            return DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        }
-        catch(Exception exc) {
-            throw new ExceptionInInitializerError(exc);
-        }
-    }
-
-    /** XML element name for a build. */
-    private final static String BUILD_TAG = "build";
-    /** XML element name for a target. */
-    private final static String TARGET_TAG = "target";
-    /** XML element name for a task. */
-    private final static String TASK_TAG = "task";
-    /** XML element name for a message. */
-    private final static String MESSAGE_TAG = "message";
-    /** XML attribute name for a name. */
-    private final static String NAME_ATTR = "name";
-    /** XML attribute name for a time. */
-    private final static String TIME_ATTR = "time";
-    /** XML attribute name for a message priority. */
-    private final static String PRIORITY_ATTR = "priority";
-    /** XML attribute name for a file location. */
-    private final static String LOCATION_ATTR = "location";
-    /** XML attribute name for an error description. */
-    private final static String ERROR_ATTR = "error";
-    /** XML element name for a stack trace. */
-    private final static 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 {
-        long startTime;
-        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";
-        }
-        Writer out = null;
-        try {
-            // specify output in UTF8 otherwise accented characters will blow
-            // up everything
-            FileOutputStream fos = new FileOutputStream(outFilename);
-            out = new OutputStreamWriter(fos, "UTF8");
-            out.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
-            out.write("<?xml-stylesheet type=\"text/xsl\" href=\"log.xsl\"?>\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) {
-        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);
-        }
-    }
-}
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/listener/AnsiColorLogger.java b/src/main/org/apache/tools/ant/listener/AnsiColorLogger.java
deleted file mode 100644
index 96e0688..0000000
--- a/src/main/org/apache/tools/ant/listener/AnsiColorLogger.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf 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;
-
-    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.
-                }
-            }
-        }
-    }
-
-    protected final void printMessage(final String message,
-                                      final PrintStream stream,
-                                      final int priority) {
-        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/Log4jListener.java b/src/main/org/apache/tools/ant/listener/Log4jListener.java
deleted file mode 100644
index 5e6ee31..0000000
--- a/src/main/org/apache/tools/ant/listener/Log4jListener.java
+++ /dev/null
@@ -1,177 +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.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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- */
-public class Log4jListener implements BuildListener {
-    final static String LOG4J_CONFIG_PROPERTY = "log4j.configuration";
-
-    private boolean initialized = false;
-
-    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");
-        }
-    }
-
-    public void buildStarted(BuildEvent event) {
-        if (initialized) {
-            Category cat = Category.getInstance(Project.class.getName());
-            cat.info("Build started.");
-        }
-    }
-
-    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());
-            }
-        }
-    }
-
-    public void targetStarted(BuildEvent event) {
-        if (initialized) {
-            Category cat = Category.getInstance(Target.class.getName());
-            cat.info("Target \"" + event.getTarget().getName() + "\" started.");
-        }
-    }
-
-    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());
-            }
-        }
-    }
-
-    public void taskStarted(BuildEvent event) {
-        if (initialized) {
-            Task task = event.getTask();
-            Category cat = Category.getInstance(task.getClass().getName());
-            cat.info("Task \"" + task.getTaskName() + "\" started.");
-        }
-    }
-
-    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());
-            }
-        }
-    }
-
-    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 1038e6b..0000000
--- a/src/main/org/apache/tools/ant/listener/MailLogger.java
+++ /dev/null
@@ -1,235 +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 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;
-
-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;
-
-/**
- *  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 {
-
-    private StringBuffer buffer = new StringBuffer();
-
-    /**
-     *  Sends an e-mail with the log results.
-     *
-     * @param  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 enum = fileProperties.keys(); enum.hasMoreElements();) {
-            String key = (String) enum.nextElement();
-            properties.put(key, fileProperties.getProperty(key));
-        }
-
-        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();
-        }
-    }
-
-
-    /**
-     *  Receives and buffers log messages.
-     *
-     * @param  message
-     */
-    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 0f8a291..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/AbstractCvsTask.java
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of 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 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;
-
-/**
- * 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>
- */
-public abstract class AbstractCvsTask extends Task {
-
-    private Commandline cmd = new Commandline();
-
-    /**
-     * the CVSROOT variable.
-     */
-    private String cvsRoot;
-
-    /**
-     * the CVS_RSH variable.
-     */
-    private String cvsRsh;
-
-    /**
-     * the package/module to check out.
-     */
-    private String cvsPackage;
-
-    /**
-     * the CVS command to execute.
-     */
-    private String command = "checkout";
-
-    /**
-     * suppress information messages.
-     */
-    private boolean quiet = false;
-
-    /**
-     * 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;
-
-    public void setExecuteStreamHandler(ExecuteStreamHandler executeStreamHandler){
-
-        this.executeStreamHandler = executeStreamHandler;
-    }
-
-    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;
-    }
-
-    public void execute() 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).
-
-        Commandline toExecute = new Commandline();
-
-        toExecute.setExecutable("cvs");
-        if (cvsRoot != null) {
-            toExecute.createArgument().setValue("-d");
-            toExecute.createArgument().setValue(cvsRoot);
-        }
-        if (noexec) {
-            toExecute.createArgument().setValue("-n");
-        }
-        if (quiet) {
-            toExecute.createArgument().setValue("-q");
-        }
-
-        toExecute.createArgument().setLine(command);
-
-        //
-        // get the other arguments.
-        //
-        toExecute.addArguments(cmd.getCommandline());
-
-        if (cvsPackage != null) {
-            toExecute.createArgument().setLine(cvsPackage);
-        }
-
-        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 {
-            log("Executing: " + executeToString(exe), Project.MSG_DEBUG);
-
-            int retCode = exe.execute();
-            /*Throw an exception if cvs exited with error. (Iulian)*/
-            if(failOnError && retCode != 0) {
-                throw new BuildException("cvs exited with error code "+ retCode);
-            }
-        }
-        catch (IOException e) {
-            throw new BuildException(e, location);
-        }
-        finally {
-            //
-            // condition used to be if(output == null) outputStream.close().  This is
-            //      not appropriate.  Check if the stream itself is not null, then close().
-            //
-            if (outputStream != null) {
-                try {
-                    outputStream.close();
-                } catch (IOException e) {}
-            }
-
-            if (errorStream != null) {
-                try {
-                    errorStream.close();
-                } catch (IOException e) {}
-            }
-        }
-    }
-
-    private String executeToString(Execute execute){
-
-        StringBuffer stringBuffer = new StringBuffer(250);
-        String[] commandLine = execute.getCommandline();
-        for(int i=0; i<commandLine.length; i++){
-
-            stringBuffer.append(commandLine[i]);
-            stringBuffer.append(" ");
-        }
-        String newLine = System.getProperty("line.separator");
-        stringBuffer.append(newLine);
-        stringBuffer.append(newLine);
-        stringBuffer.append("environment:");
-        stringBuffer.append(newLine);
-
-
-        String[] variableArray = execute.getEnvironment();
-
-        if(variableArray != null){
-            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.cmd.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 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;
-    }
-}
-
-
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 131211e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Ant.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;
-
-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
- *
- * @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;
-
-    /**
-     * 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 = new Project();
-        newProject.setJavaVersionProperty();
-        newProject.addTaskDefinition("property", 
-                             (Class)project.getTaskDefinitions().get("property"));
-    }
-
-    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 );
-            }
-        }
-
-        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);
-            }
-        }
-    }
-
-    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();
-
-            
-            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;
-        }
-    }
-
-    /**
-     * 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/src/main/org/apache/tools/ant/taskdefs/AntStructure.java b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java
deleted file mode 100644
index a1833a7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/AntStructure.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;
-
-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$
- *
- * @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;
-    }
-
-    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();
-            }
-        }
-    }
-
-    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(TYPES);
-        out.println(")*>");
-        out.println("<!ATTLIST project");
-        out.println("          name    CDATA #IMPLIED");
-        out.println("          default CDATA #REQUIRED");
-        out.println("          basedir CDATA #IMPLIED>");
-        out.println("");
-    }
-
-    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("");
-    }
-
-    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 9346260..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Available.java
+++ /dev/null
@@ -1,392 +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;
-
-/**
- * Will set the given property if the requested resource is available at runtime.
- *
- * @author Stefano Mazzocchi <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- *
- * @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;
-
-    public void setClasspath(Path classpath) {
-        createClasspath().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 setFilepath(Path filepath) {
-        createFilepath().append(filepath);
-    }
-
-    public Path createFilepath() {
-        if (this.filepath == null) {
-            this.filepath = new Path(project);
-        }
-        return this.filepath.createPath();
-    }
-
-    public void setProperty(String property) {
-        this.property = property;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public void setClassname(String classname) {
-        if (!"".equals(classname)) {
-            this.classname = classname;
-        }
-    }
-
-    public void setFile(String file) {
-        this.file = file;
-    }
-
-    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);
-    }
-
-    public void setType(FileDir type) {
-        this.type = type;
-    }
-
-    public void execute() throws BuildException {
-        if (property == null) {
-            throw new BuildException("property attribute is required", location);
-        }
-
-        isTask = true;
-        if (eval()) {
-            String lSep = System.getProperty("line.separator");
-            if (null != project.getProperty(property)) {
-                log("DEPRECATED - <available> used to overide an existing property. "
-                    + lSep
-                    + " Build writer should not reuse the same property name for "
-                    + lSep + "different values.");
-            }
-            this.project.setProperty(property, value);
-        }
-        isTask = false;
-    }
-
-    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.");
-            }
-        }
-
-        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();
-        }
-
-        if (!isTask) {
-            setTaskName(null);
-        }
-
-        return true;
-    }
-
-    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);
-                /*
-                ** filepath can be a list of directory and/or
-                ** file names (gen'd via <fileset>)
-                **
-                ** look for:
-                **   full-pathname specified == path in list
-                **   full-pathname specified == parent dir of path in list
-                **   simple name specified   == path in list
-                **   simple name specified   == path in list + name
-                **   simple name specified   == parent dir + name
-                **   simple name specified   == parent of parent dir + name
-                **
-                */
-                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;
-    }
-
-    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();
-    }
-
-    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);
-            }
-        }
-    }
-
-    private boolean checkClass(String classname) {
-        try {
-            if (loader != null) {
-                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) {
-                    l.loadClass(classname);
-                } else {
-                    Class.forName(classname);
-                }
-            }
-            return true;
-        } catch (ClassNotFoundException e) {
-            return false;
-        } catch (NoClassDefFoundError e) {
-            return false;
-        }
-    }
-
-    public static class FileDir extends EnumeratedAttribute {
-
-        private final static String[] values = {"file", "dir"};
-
-        public String[] getValues() {
-            return values;
-        }
-
-        public boolean isDir() {
-            return "dir".equalsIgnoreCase(getValue());
-        }
-
-        public boolean isFile() {
-            return "file".equalsIgnoreCase(getValue());
-        }
-
-        public String toString() {
-            return 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 5df0c09..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/BUnzip2.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.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>
- *
- * @ant.task category="packaging"
- */
-
-public class BUnzip2 extends Unpack {
-
-    private final static 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 62f8c9f..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.ant.taskdefs.Pack;
-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>
- *
- * @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/CVSPass.java b/src/main/org/apache/tools/ant/taskdefs/CVSPass.java
deleted file mode 100644
index 805fa7d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/CVSPass.java
+++ /dev/null
@@ -1,190 +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 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$
- *
- * @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;
-    /** End of line character */
-    private final String EOL = System.getProperty("line.separator");
-
-    /** 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 };
-
-    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);
-
-        try{
-            StringBuffer buf = new StringBuffer();
-
-            if(passFile.exists()){
-                BufferedReader reader =
-                    new BufferedReader(new FileReader(passFile));
-
-                String line = null;
-
-                while((line=reader.readLine())!=null){
-                    if(!line.startsWith(cvsRoot)){
-                        buf.append(line+EOL);
-                    }
-                }
-
-            reader.close();
-            }
-
-            String pwdfile = buf.toString() + cvsRoot + " A" + mangle(password);
-
-            log("Writing -> " + pwdfile , Project.MSG_DEBUG);
-
-            PrintWriter writer = new PrintWriter(new FileWriter(passFile));
-
-            writer.println( pwdfile );
-
-            writer.close();
-        }catch(IOException e){
-            throw new BuildException(e);
-        }
-
-    }
-
-    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 a269b05..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/CallTarget.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;
-
-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> 
- *
- * @ant.task name="antcall" category="control"
- */
-public class CallTarget extends Task {
-
-    private Ant callee;
-    private String subTarget;
-    private boolean initialized = false;
-    private boolean inheritAll = true;
-
-    /**
-     * 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;
-    } //-- setInheritAll
-
-    public void init() {
-        callee = (Ant) project.createTask("ant");
-        callee.setOwningTarget(target);
-        callee.setTaskName(getTaskName());
-        callee.setLocation(location);
-        callee.init();
-        initialized = true;
-    }
-
-    public void execute() {
-        if (!initialized) {
-            init();
-        }
-        
-        if (subTarget == null) {
-            throw new BuildException("Attribute target is required.", 
-                                     location);
-        }
-        
-        callee.setDir(project.getBaseDir());
-        callee.setAntfile(project.getProperty("ant.file"));
-        callee.setTarget(subTarget);
-        callee.setInheritAll(inheritAll);
-        callee.execute();
-    }
-
-    public Property createParam() {
-        return callee.createProperty();
-    }
-
-    /** 
-     * create a reference element that identifies a data type that
-     * should be carried over to the new project.
-     */
-    public void addReference(Ant.Reference r) {
-        callee.addReference(r);
-    }
-
-    public void setTarget(String target) {
-        subTarget = target;
-    }
-
-    protected void handleOutput(String line) {
-        if (callee != null) {
-            callee.handleOutput(line);
-        }
-        else {
-            super.handleOutput(line);
-        }
-    }
-    
-    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 b40c0e0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Checksum.java
+++ /dev/null
@@ -1,428 +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.taskdefs.MatchingTask;
-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>
- *
- * @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 {
-        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 {
-
-        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.");
-        }
-
-        if (fileext == null) {
-            fileext = "." + algorithm;
-        } else if (fileext.trim().length() == 0) {
-            throw new BuildException(
-                "File extension when specified must not be an empty string");
-        }
-
-        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);
-        }
-
-        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();
-    }
-
-    /**
-     * 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.setProperty(prop, checksum);
-                    }
-                } else if (destination instanceof java.io.File) {
-                    if (isCondition) {
-                        File existingFile = (File) destination;
-                        if (existingFile.exists() &&
-                            existingFile.length() == checksum.length()) {
-                            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 56938d9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Chmod.java
+++ /dev/null
@@ -1,208 +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.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>
- *
- * @ant.task category="filesystem"
- */
-public class Chmod extends ExecuteOn {
-
-    private FileSet defaultSet = new FileSet();
-    private boolean defaultSetDefined = false;
-    private boolean havePerm = false;
-
-    public Chmod() {
-        super.setExecutable("chmod");
-        super.setParallel(true);
-        super.setSkipEmptyFilesets(true);
-    }
-
-    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 {
-        if (defaultSetDefined || defaultSet.getDir(project) == null) {
-            super.execute();
-        } else if (isValidOs()) {
-            // we are chmodding the given directory
-            createArg().setValue(defaultSet.getDir(project).getPath());
-            Execute execute = prepareExec();
-            try {
-                execute.setCommandline(cmdl.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/ConditionTask.java b/src/main/org/apache/tools/ant/taskdefs/ConditionTask.java
deleted file mode 100644
index 72f312e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ConditionTask.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.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$
- *
- * @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 1.1
-     */
-    public void setProperty(String p) {property = p;}
-
-    /**
-     * The value for the property to set. Defaults to "true".
-     *
-     * @since 1.1
-     */
-    public void setValue(String v) {value = v;}
-
-    /**
-     * See whether our nested condition holds and set the property.
-     *
-     * @since 1.1
-     */
-    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 ca9020e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Copy.java
+++ /dev/null
@@ -1,494 +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.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$
- *
- * @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;
-
-    protected Hashtable fileCopyMap = new Hashtable();
-    protected Hashtable dirCopyMap = new Hashtable();
-    protected Hashtable completeDirMap = new Hashtable();
-
-    protected Mapper mapperElement = null;
-    private Vector filterSets = new Vector();
-    private FileUtils fileUtils;
-    private String encoding = null;
-
-    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 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;
-    }
-
-    /**
-     * 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;
-    }
-
-    /**
-     * 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 {
-        // make sure we don't have an illegal set of options
-        validateAttributes();
-
-        // 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 = "Could not find file "
-                                 + file.getAbsolutePath() + " to copy.";
-                log(message);
-                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();
-
-        // clean up destDir again - so this instance can be used a second
-        // time without throwing an exception
-        if (destFile != null) {
-            destDir = null;
-        }
-        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) {
-                    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 perform operation from directory to file.");
-                }
-            }
-        }
-
-        if (destFile != null) {
-            destDir = new File(destFile.getParent());   // be 1.1 friendly
-        }
-
-    }
-
-    /**
-     * 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,
-                                       forceOverwrite, preserveLastModified,
-                                       encoding);
-                } 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 8d11a5b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Copydir.java
+++ /dev/null
@@ -1,163 +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 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;
-
-/**
- * Copies a directory.
- *
- * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
- *
- * @deprecated The copydir task is deprecated.  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");
-        }
-
-        DirectoryScanner ds = super.getDirectoryScanner(srcDir);
-
-        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);
-                }
-            }
-        }
-    }
-
-    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 6e6e714..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Copyfile.java
+++ /dev/null
@@ -1,125 +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 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
- *
- * @deprecated The copyfile task is deprecated.  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");
-        }
-
-        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 daf8d2f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Cvs.java
+++ /dev/null
@@ -1,78 +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>
- *
- * @ant.task category="scm"
- */
-public class Cvs extends AbstractCvsTask {
-
-    public Cvs(){
-
-        setTaskName("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 780daa0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Definer.java
+++ /dev/null
@@ -1,229 +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.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>
- */
-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);
-    }
-    
-    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 {
-
-            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();
-                InputStream is=null;
-                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);
-            }
-        }
-    }
-    
-    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 66666ba..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Delete.java
+++ /dev/null
@@ -1,431 +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>
- *
- * @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;
-    protected boolean includeEmpty = false;     // by default, remove matching empty dirs
-
-    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 exclude list
-     */
-    public PatternSet.NameEntry createExclude() {
-        usedMatchingTask = true;
-        return super.createExclude();
-    }
-
-    /**
-     * 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 dc5bd92..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Deltree.java
+++ /dev/null
@@ -1,135 +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.Task;
-import org.apache.tools.ant.BuildException;
-import java.io.File;
-import java.io.IOException;
-
-/**
- *
- *
- * @author duncan@x180.com
- *
- * @deprecated The deltree task is deprecated.  Use delete instead.
- */
-
-public class Deltree extends Task {
-
-    private File dir;
-
-    public void setDir(File dir) {
-        this.dir = dir;
-    }
-
-    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;
-                // String msg = "Given dir: " + dir.getAbsolutePath() +
-                // " is not a dir";
-                // throw new BuildException(msg);
-            }
-
-            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 95c5bd9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/DependSet.java
+++ /dev/null
@@ -1,324 +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$
- */
-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/Ear.java b/src/main/org/apache/tools/ant/taskdefs/Ear.java
deleted file mode 100644
index a8c9850..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Ear.java
+++ /dev/null
@@ -1,158 +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> 
- *
- * @ant.task category="packaging"
- */
-public class Ear extends Jar {
-
-    private File deploymentDescriptor;
-    private boolean descriptorAdded;    
-
-    public Ear() {
-        super();
-        archiveType = "ear";
-        emptyBehavior = "create";
-    }
-
-    /**
-     * @deprecated Use setDestFile(destfile) instead
-     */ 
-    public void setEarfile(File earFile) {
-        log("DEPRECATED - The earfile attribute is deprecated. Use destfile attribute instead.");
-        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
-        log("addArchives called",Project.MSG_DEBUG);
-        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 f6be480..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Echo.java
+++ /dev/null
@@ -1,168 +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
- *
- * @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 {
-        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 905da7b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Exec.java
+++ /dev/null
@@ -1,267 +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 final static 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 bd5473e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ExecTask.java
+++ /dev/null
@@ -1,387 +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 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>
- *
- * @ant.task category="control"
- */
-public class ExecTask extends Task {
-
-    private static String lSep = System.getProperty("line.separator");
-
-    private String os;
-    private File out;
-    private File dir;
-    protected boolean failOnError = false;
-    protected boolean newEnvironment = false;
-    private Integer 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;
-
-    /** 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.
-     */
-    public void setTimeout(Integer value) {
-        timeout = value;
-    }
-
-    /**
-     * 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 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);
-        }
-    }
-    
-    /**
-     * ant attribute
-     */
-    public void setFailIfExecutionFails(boolean flag) {
-        failIfExecFails=flag;
-    }
-    
-    /**
-     * Do the work.
-     */
-    public void execute() throws BuildException {
-        checkConfiguration();
-        if (isValidOs()) {
-            runExec(prepareExec());
-        }
-    }
-
-    /**
-     * 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();
-        }
-        // show the command
-        log(cmdl.toString(), Project.MSG_VERBOSE);
-
-        Execute exe = new Execute(createHandler(), createWatchdog());
-        exe.setAntRun(project);
-        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(lSep);
-                }
-                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 {
-        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);
-                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.intValue());
-    }
-
-    /**
-     * 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 e64269c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Execute.java
+++ /dev/null
@@ -1,847 +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
- *
- * @version $Revision$
- */
-public class Execute {
-
-    /** Invalid exit code. **/
-    public final static 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 try
-        }
-
-        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 1.35, 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 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.toString(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.toString(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.toString(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.toString(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 e2e1bae..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java
+++ /dev/null
@@ -1,149 +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.AntClassLoader;
-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.CommandlineJava;
-import org.apache.tools.ant.types.Path;
-
-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>
- */
-public class ExecuteJava {
-
-    private Commandline javaCommand = null;
-    private Path classpath = null;
-    private CommandlineJava.SysProperties sysProperties = null;
-
-    public void setJavaCommand(Commandline javaCommand) {
-        this.javaCommand = javaCommand;
-    }
-
-    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) {
-    }
-
-    public void execute(Project project) throws BuildException{
-        final String classname = javaCommand.getExecutable();
-        final Object[] argument = { javaCommand.getArguments() };
-
-        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);
-            }
-            final Method main = target.getMethod("main", param);
-            main.invoke(null, argument);
-        } catch (NullPointerException e) {
-            throw new BuildException("Could not find main() method in " + classname);
-        } catch (ClassNotFoundException e) {
-            throw new BuildException("Could not find " + classname + ". Make sure you have it in your classpath");
-        } catch (InvocationTargetException e) {
-            Throwable t = e.getTargetException();
-            if (!(t instanceof SecurityException)) {
-                throw new BuildException(t);
-            }
-            else {
-                throw (SecurityException)t;
-            }
-        } catch (Exception e) {
-            throw new BuildException(e);
-        } finally {
-            if (loader != null) {
-                loader.resetThreadContextLoader();
-                loader.cleanup();
-            }
-            if (sysProperties != null) {
-                sysProperties.restoreSystem();
-            }
-        }
-    }
-}
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 4156a7b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java
+++ /dev/null
@@ -1,425 +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>
- *
- * @ant.task name="execon"
- */
-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 (mapperElement == 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("Executing " + Commandline.toString(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("Executing " + Commandline.toString(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 {
-        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 ac9bfef..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ExecuteStreamHandler.java
+++ /dev/null
@@ -1,100 +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 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
- */
-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 ebcd599..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ExecuteWatchdog.java
+++ /dev/null
@@ -1,212 +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;
-
-/**
- * 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
- */
-public class ExecuteWatchdog implements Runnable {
-        
-    /** the process to execute and watch for duration */
-    private Process process;
-
-    /** timeout duration. Once the process running time exceeds this it should be killed */
-    private int timeout;
-
-    /** 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;
-
-    /**
-     * 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(int timeout) {
-        if (timeout < 1) {
-            throw new IllegalArgumentException("timeout lesser than 1.");
-        }
-        this.timeout = timeout;
-    }
-
-    /**
-     * 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    thrown 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;
-        final Thread thread = new Thread(this, "WATCHDOG");
-        thread.setDaemon(true);
-        thread.start();
-    }
-
-    /**
-     * Stops the watcher. It will notify all threads possibly waiting on this object.
-     */
-    public synchronized void stop() {
-        watch = false;
-        notifyAll();
-    }
-
-
-    /**
-     * Watches the process and terminates it, if it runs for to long.
-     */
-    public synchronized void run() {
-        try {
-            // This isn't a Task, don't have a Project object to log.
-            // project.log("ExecuteWatchdog: timeout = "+timeout+" msec",  Project.MSG_VERBOSE);
-            final long until = System.currentTimeMillis() + timeout;
-            long now;
-            while (watch && until > (now = System.currentTimeMillis())) {
-                try {
-                    wait(until - now);
-                } catch (InterruptedException e) {}
-            }
-
-            // if we are here, either someone stopped the watchdog,
-            // we are on timeout and the process must be killed, or
-            // we are on timeout and the process has already stopped.
-            try {
-                // We must check if the process was not stopped
-                // before being here
-                process.exitValue();
-            } catch (IllegalThreadStateException e){
-                // 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 37e9d0c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Exit.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 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>
- *
- * @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 31d35b4..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Expand.java
+++ /dev/null
@@ -1,297 +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>
- *
- * @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 43a29dd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Filter.java
+++ /dev/null
@@ -1,116 +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>
- *
- * @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 da69ddd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/FixCRLF.java
+++ /dev/null
@@ -1,1055 +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$
- *
- * @ant.task category="filesystem"
- */
-
-public class FixCRLF extends MatchingTask {
-
-    private final static int UNDEF = -1;
-    private final static int NOTJAVA = 0;
-    private final static int LOOKING = 1;
-    private final static int IN_CHAR_CONST = 2;
-    private final static int IN_STR_CONST = 3;
-    private final static int IN_SINGLE_COMMENT = 4;
-    private final static int IN_MULTI_COMMENT = 5;
-
-    private final static int ASIS = 0;
-    private final static int CR = 1;
-    private final static int LF = 2;
-    private final static int CRLF = 3;
-    private final static int ADD = 1;
-    private final static int REMOVE = -1;
-    private final static int SPACES = -1;
-    private final static int TABS = 1;
-
-    private final static int INBUFLEN = 8192;
-    private final static int LINEBUFLEN = 200;
-
-    private final static 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) charaters 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:
-                            if ((endComment =
-                                 lineString.indexOf("*/", line.getNext())
-                                 ) >= 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);
-                }
-            }
-
-
-            File destFile = new File(destD, file);
-
-            try {
-                lines.close();
-                lines = null;
-            }
-            catch (IOException e) {
-                throw new BuildException("Unable to close source file " + srcFile);
-            }
-
-            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 {
-        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 5b9951e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/GUnzip.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.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>
- *
- * @ant.task category="packaging"
- */
-
-public class GUnzip extends Unpack {
-
-    private final static 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 a8ef2c8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/GZip.java
+++ /dev/null
@@ -1,94 +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.taskdefs.Pack;
-
-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>
- *
- * @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) {}
-            }
-        }
-    }
-}
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 38bbb1f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/GenerateKey.java
+++ /dev/null
@@ -1,345 +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.types.Commandline;
-
-/**
- * Generates a key.
- * 
- * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
- *
- * @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 (Project.getJavaVersion().equals(Project.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 b36f1a3..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Get.java
+++ /dev/null
@@ -1,430 +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.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/**
- * 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)
- *
- * @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.
-
-            FileOutputStream fos = new FileOutputStream(dest);
-
-            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);
-            }
-
-            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();
-            }
-            fos.close();
-            is.close();
-
-            //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);
-                }
-            }
-        } catch (IOException ioe) {
-            log("Error getting " + source + " to " + dest );
-            if(ignoreErrors) {
-                return;
-            }
-            throw new BuildException(ioe, location);
-        }
-    }
-
-    /**
-     * set the timestamp of a named file to a specified time.
-     *
-     * @param filename
-     * @param time in milliseconds since the start of the era
-     * @return true if it succeeded. False means that this is a
-     * java1.1 system and that file times can not be set
-     *@exception BuildException Thrown in unrecoverable error. Likely
-     *this comes from file access failures.
-     */
-    protected boolean touchFile(File file, long timemillis)
-        throws BuildException  {
-
-        if (Project.getJavaVersion() != Project.JAVA_1_1) {
-            Touch touch = (Touch) project.createTask("touch");
-            touch.setOwningTarget(target);
-            touch.setTaskName(getTaskName());
-            touch.setLocation(getLocation());
-            touch.setFile(file);
-            touch.setMillis(timemillis);
-            touch.touch();
-            return true;
-
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * 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.
-     * <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 v "true" to enable file time fetching
-     */
-    public void setUseTimestamp(boolean v) {
-        if (Project.getJavaVersion() != Project.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 5fdb6f5..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Input.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;
-
-import  java.io.BufferedReader;
-import  java.io.InputStreamReader;
-import  java.io.IOException;
-import  java.util.StringTokenizer;
-import  java.util.Vector;
-import org.apache.tools.ant.Task;
-
-import org.apache.tools.ant.BuildException;
-
-import org.apache.tools.ant.Project;
-
-
-/**
- * Ant task to read input line from console.
- *
- * @author <a href="mailto:usch@usch.net">Ulrich Schmidt</a>
- *
- * @ant.task category="control"
- */
-public class Input extends Task {
-    private String validargs = null;
-    private String message = "";
-    private String addproperty = null;
-    private String input = 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;
-    }
-
-    /**
-     * Sets surrogate input to allow automated testing.
-     * @param input The surrogate input used for testing.
-     */
-    public void setTestinput (String testinput) {
-        this.input = testinput;
-    }
-
-    /**
-     * No arg constructor.
-     */
-    public Input () {
-    }
-
-    /**
-     * Actual test method executed by jakarta-ant.
-     * @exception BuildException
-     */
-    public void execute () throws BuildException {
-        Vector accept = null;
-        if (validargs != null) {
-            accept = new Vector();
-            StringTokenizer stok = new StringTokenizer(validargs, ",", false);
-            while (stok.hasMoreTokens()) {
-                accept.addElement(stok.nextToken());
-            }
-        }
-        log(message, Project.MSG_WARN);
-        if (input == null) {
-            try {
-                BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
-                input = in.readLine();
-                if (accept != null) {
-                    while (!accept.contains(input)) {
-                        log(message, Project.MSG_WARN);
-                        input = in.readLine();
-                    }
-                }
-            } catch (IOException e) {
-                throw  new BuildException("Failed to read input from Console.", e);
-            }
-        }
-        // not quite the original intention of this task but for the sake
-        // of testing ;-)
-        else {
-            if (accept != null && (!accept.contains(input))) {
-                throw  new BuildException("Invalid input please reenter.");
-            }
-        }
-        // adopted from org.apache.tools.ant.taskdefs.Property
-        if (addproperty != null) {
-            if (project.getProperty(addproperty) == null) {
-                project.setProperty(addproperty, input);
-            }
-            else {
-                log("Override ignored for " + addproperty, Project.MSG_VERBOSE);
-            }
-        }
-    }
-
-    // copied n' pasted from org.apache.tools.ant.taskdefs.Exit
-    /**
-     * Set a multiline message.
-     */
-    public void addText(String msg) {
-        message += project.replaceProperties(msg);
-    }
-}
-
-
-
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 0c92484..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Jar.java
+++ /dev/null
@@ -1,476 +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>
- *
- * @ant.task category="packaging"
- */
-public class Jar extends Zip {
-    /** The index file name. */
-    private final static String INDEX_NAME = "META-INF/INDEX.LIST";
-
-    /** merged manifests added through addConfiguredManifest */
-    private Manifest configuredManifest;
-
-    /**  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) {
-        log("DEPRECATED - The jarfile attribute is deprecated. Use destfile attribute instead.");
-        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);
-        }
-    }
-
-    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);
-        }
-        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);
-        }
-        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.setProperty("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.setProperty("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 (vPath.equalsIgnoreCase("META-INF/MANIFEST.MF"))  {
-            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 (vPath.equalsIgnoreCase("META-INF/MANIFEST.MF"))  {
-            filesetManifest(file, is);
-        } else {
-            super.zipFile(is, zOut, vPath, lastModified, null);
-        }
-    }
-
-    private void filesetManifest(File file, InputStream is) {
-        if (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.
-     */
-    protected void cleanUp() {
-        super.cleanUp();
-
-        configuredManifest = null;
-        filesetManifest = null;
-        mergeManifests = false;
-        mergeManifestsMain = false;
-        manifest = null;
-        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 ad73bf3..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Java.java
+++ /dev/null
@@ -1,418 +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>
- *
- * @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;
-    
-    /**
-     * Do the execution.
-     */
-    public void execute() throws BuildException {
-        int err = -1;
-        if ((err = executeJava()) != 0) {
-            if (failOnError) {
-                throw new BuildException("Java returned: "+err, location);
-            } else {
-                log("Java Result: " + err, Project.MSG_ERR);
-            }
-        }
-    }
-
-    /**
-     * 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("Forking " + cmdl.toString(), Project.MSG_VERBOSE);
-        
-            return run(cmdl.getCommandline());
-        } 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.getJavaCommand().toString(), 
-                Project.MSG_VERBOSE);
-            try {
-                run(cmdl);
-                return 0;
-            }
-            catch (ExitException ex) {
-                return ex.getStatus();
-            }
-        }
-    }
-
-    /**
-     * Set the classpath to be used for this compilation.
-     */
-    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 1.32, 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 1.32, Ant 1.5
-     */
-    public void setNewenvironment(boolean newenv) {
-        newEnvironment = newenv;
-    }
-
-    protected void handleOutput(String line) {
-        if (outStream != null) {
-            outStream.println(line);
-        }
-        else {
-            super.handleOutput(line);
-        }
-    }
-    
-    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());
-        if (out != null) {
-            try {
-                outStream = new PrintStream(new FileOutputStream(out));
-                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), 
-                                  null);
-            } else {
-                fos = new FileOutputStream(out);
-                exe = new Execute(new PumpStreamHandler(fos), null);
-            }
-            
-            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 {
-                return exe.execute();
-            } 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();
-    }
-}
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 1913871..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Javac.java
+++ /dev/null
@@ -1,870 +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.Commandline;
-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.SourceFileScanner;
-import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter;
-import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory;
-import org.apache.tools.ant.taskdefs.condition.Os;
-
-import java.io.File;
-import java.util.Enumeration;
-import java.util.Vector;
-
-/**
- * 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$
- *
- * @ant.task category="java"
- */
-
-public class Javac extends MatchingTask {
-
-    private final static String FAIL_MSG
-        = "Compile failed, messages should have been provided.";
-
-    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 String fork = "false";
-    private String forkedExecutable = null;
-    private boolean nowarn = false;
-    private String memoryInitialSize;
-    private String memoryMaximumSize;
-    private Vector implementationSpecificArgs = new Vector();
-
-    protected boolean failOnError = true;
-    protected boolean listFiles = false;
-    protected File[] compileList = new File[0];
-
-    private String source;
-    private String debugLevel;
-
-    /**
-     * The compiler set via the compiler attribute.
-     *
-     * <p>default is null</p>
-     *
-     * @since 1.84, Ant 1.5
-     */
-    private String compiler = null;
-
-    /**
-     * 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.
-     */
-    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" or the name of the javac
-     * executable.
-     */
-    public void setFork(String f) {
-        if (f.equalsIgnoreCase("on")
-            || f.equalsIgnoreCase("true")
-            || f.equalsIgnoreCase("yes")) {
-            fork = "true";
-            forkedExecutable = getSystemJavac();
-        } else if (f.equalsIgnoreCase("off")
-                   || f.equalsIgnoreCase("false")
-                   || f.equalsIgnoreCase("no")) {
-            fork = "false";
-            forkedExecutable = null;
-        } else {
-            fork = "true";
-            forkedExecutable = f;
-        }
-    }
-
-    /**
-     * Is this a forked invocation of JDK's javac?
-     */
-    public boolean isForkedJavac() {
-        return !"false".equals(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();
-        implementationSpecificArgs.addElement(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() {
-        Vector args = new Vector();
-        for (Enumeration enum = implementationSpecificArgs.elements();
-             enum.hasMoreElements();
-             ) {
-            String[] curr =
-                ((ImplementationSpecificArgument) enum.nextElement()).getParts();
-            for (int i=0; i<curr.length; i++) {
-                args.addElement(curr[i]);
-            }
-        }
-        String[] res = new String[args.size()];
-        args.copyInto(res);
-        return res;
-    }
-
-    /**
-     * Executes the task.
-     */
-    public void execute() throws BuildException {
-        checkParameters();
-        String[] list = src.list();
-
-        // scan source directories and dest directory to build up
-        // compile lists
-        resetFileLists();
-        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() {
-        // This is the most common extension case - exe for windows and OS/2,
-        // nothing for *nix.
-        String extension =  Os.isFamily("dos") ? ".exe" : "";
-
-        File jExecutable = null;
-
-        // On AIX using IBM's JDK 1.2 the javac executable is in
-        // the java.home/../../sh directory
-        if (Os.isName("aix")) {
-            jExecutable = new File(System.getProperty("java.home") +
-                                   "/../../sh/javac" + extension);
-        }
-
-        if (jExecutable == null || !jExecutable.exists()) {
-            // Look for javac in the java.home/../bin directory.  
-            jExecutable = new File(System.getProperty("java.home") +
-                                   "/../bin/javac" + extension);
-        }
-
-        // 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.
-        if (jExecutable.exists() && !Os.isFamily("netware")) {
-            return jExecutable.getAbsolutePath();
-        } else {
-            return "javac";
-        }
-    }
-
-    /**
-     * Choose the implementation for this particular task.
-     *
-     * @since 1.84, Ant 1.5
-     */
-    public void setCompiler(String compiler) {
-        this.compiler = 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>
-     *
-     * @since 1.84, Ant 1.5
-     */
-    public String getCompiler() {
-        String compilerImpl = 
-            this.compiler != null ? this.compiler 
-                                  : project.getProperty("build.compiler");
-
-        if (!"false".equals(fork)) {
-            if (compilerImpl != null) {
-                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);
-                }
-            }
-            else {
-                compilerImpl = "extJavac";
-            }
-        }
-
-        if (compilerImpl == null) {
-            if (Project.getJavaVersion() != Project.JAVA_1_1 &&
-                Project.getJavaVersion() != Project.JAVA_1_2) {
-                compilerImpl = "modern";
-            } else {
-                compilerImpl = "classic";
-            }
-        }
-        return compilerImpl;
-    }
-
-    /**
-     * Check that all required attributes have been set and nothing
-     * silly has been entered.
-     *
-     * @since 1.82, 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 1.82, 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 "implementation" attribute to Commandline$Attribute
-     * used to filter command line attributes based on the current
-     * implementation.
-     */
-    public class ImplementationSpecificArgument
-        extends Commandline.Argument {
-
-        private String impl;
-
-        public void setImplementation(String impl) {
-            this.impl = impl;
-        }
-
-        public String[] getParts() {
-            if (impl == null || impl.equals(getCompiler())) {
-                return super.getParts();
-            } else {
-                return new String[0];
-            }
-        }
-    }
-
-}
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 60160ce..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
+++ /dev/null
@@ -1,1377 +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.Task;
-import org.apache.tools.ant.taskdefs.condition.Os;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * 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>the java comment-stripper reader is horribly slow
- *    <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>
- *
- * @ant.task category="java"
- */
-
-public class Javadoc extends Task {
-
-    public class DocletParam {
-        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 class DocletInfo {
-        private String name;
-        private Path path;
-
-        private Vector params = new Vector();
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public void setPath(Path path) {
-            if (this.path == null) {
-                this.path = path;
-            } else {
-                this.path.append(path);
-            }
-        }
-
-        public Path getPath() {
-            return path;
-        }
-
-        public Path createPath() {
-            if (path == null) {
-                path = new Path(getProject());
-            }
-            return path.createPath();
-        }
-
-        /**
-         * Adds a reference to a CLASSPATH defined elsewhere.
-         */
-        public void setPathRef(Reference r) {
-            createPath().setRefid(r);
-        }
-
-        public DocletParam createParam() {
-            DocletParam param = new DocletParam();
-            params.addElement(param);
-
-            return param;
-        }
-
-        public Enumeration getParams() {
-            return params.elements();
-        }
-    }
-
-    public static class PackageName {
-        private String name;
-        public void setName(String name) {
-            this.name = name;
-        }
-        public String getName() {
-            return name;
-        }
-        public String toString() {
-            return getName();
-        }
-    }
-
-    public static class SourceFile {
-        private File file;
-        public void setFile(File file) {
-            this.file = file;
-        }
-        public File getFile() {
-            return file;
-        }
-    }
-
-    public static class Html {
-        private StringBuffer text = new StringBuffer();
-        public void addText(String t) {
-            text.append(t);
-        }
-        public String getText() {
-            return text.toString();
-        }
-    }
-
-    public static class AccessType extends EnumeratedAttribute {
-        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"};
-        }
-    }
-
-    private Commandline cmd = new Commandline();
-    private static boolean javadoc1 =
-        (Project.getJavaVersion() == Project.JAVA_1_1);
-
-    private static boolean javadoc4 =
-        (Project.getJavaVersion() != Project.JAVA_1_1 &&
-         Project.getJavaVersion() != Project.JAVA_1_2 &&
-         Project.getJavaVersion() != Project.JAVA_1_3);
-
-    private void addArgIf(boolean b, String arg) {
-        if (b) {
-            cmd.createArgument().setValue(arg);
-        }
-    }
-
-    private void add12ArgIfNotEmpty(String key, String value) {
-        if (!javadoc1) {
-            if (value != null && value.length() != 0) {
-                cmd.createArgument().setValue(key);
-                cmd.createArgument().setValue(value);
-            } else {
-                project.log(this,
-                            "Warning: Leaving out empty argument '" + key + "'",
-                            Project.MSG_WARN);
-            }
-        }
-    }
-
-    private void add12ArgIf(boolean b, String arg) {
-        if (!javadoc1 && b) {
-            cmd.createArgument().setValue(arg);
-        }
-    }
-
-    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(1);
-    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 File tmpList = null;
-    private FileUtils fileUtils = FileUtils.newFileUtils();
-
-    /**
-     * Work around command line length limit by using an external file
-     * for the sourcefiles.
-     */
-    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;
-    }
-
-    public void setMaxmemory(String max){
-        if(javadoc1){
-            cmd.createArgument().setValue("-J-mx" + max);
-        } else{
-            cmd.createArgument().setValue("-J-Xmx" + max);
-        }
-    }
-
-    public void setAdditionalparam(String add){
-        cmd.createArgument().setLine(add);
-    }
-
-    public void setSourcepath(Path src) {
-        if (sourcePath == null) {
-            sourcePath = src;
-        } else {
-            sourcePath.append(src);
-        }
-    }
-    public Path createSourcepath() {
-        if (sourcePath == null) {
-            sourcePath = new Path(project);
-        }
-        return sourcePath.createPath();
-    }
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere.
-     */
-    public void setSourcepathRef(Reference r) {
-        createSourcepath().setRefid(r);
-    }
-
-    public void setDestdir(File dir) {
-        destDir = dir;
-        cmd.createArgument().setValue("-d");
-        cmd.createArgument().setFile(destDir);
-    }
-    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);
-        }
-    }
-    public void addSource(SourceFile sf) {
-        sourceFiles.addElement(sf);
-    }
-    public void setPackagenames(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) {
-        packageNames.addElement(pn);
-    }
-
-    public void setExcludePackageNames(String src) {
-        StringTokenizer tok = new StringTokenizer(src, ",");
-        while (tok.hasMoreTokens()) {
-            String p = tok.nextToken();
-            PackageName pn = new PackageName();
-            pn.setName(p);
-            addExcludePackage(pn);
-        }
-    }
-    public void addExcludePackage(PackageName pn) {
-        excludePackageNames.addElement(pn);
-    }
-
-    public void setOverview(File f) {
-        if (!javadoc1) {
-            cmd.createArgument().setValue("-overview");
-            cmd.createArgument().setFile(f);
-        }
-    }
-    public void setPublic(boolean b) {
-        addArgIf(b, "-public");
-    }
-    public void setProtected(boolean b) {
-        addArgIf(b, "-protected");
-    }
-    public void setPackage(boolean b) {
-        addArgIf(b, "-package");
-    }
-    public void setPrivate(boolean b) {
-        addArgIf(b, "-private");
-    }
-    public void setAccess(AccessType at) {
-        cmd.createArgument().setValue("-" + at.getValue());
-    }
-    public void setDoclet(String src) {
-        if (doclet == null) {
-            doclet = new DocletInfo();
-        }
-        doclet.setName(src);
-    }
-
-    public void setDocletPath(Path src) {
-        if (doclet == null) {
-            doclet = new DocletInfo();
-        }
-        doclet.setPath(src);
-    }
-
-    public void setDocletPathRef(Reference r) {
-        if (doclet == null) {
-            doclet = new DocletInfo();
-        }
-        doclet.createPath().setRefid(r);
-    }
-
-    public DocletInfo createDoclet() {
-        doclet = new DocletInfo();
-        return doclet;
-    }
-
-    public void setOld(boolean b) {
-        add12ArgIf(b, "-1.1");
-    }
-    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);
-    }
-
-    public void setExtdirs(String src) {
-        if (!javadoc1) {
-            cmd.createArgument().setValue("-extdirs");
-            cmd.createArgument().setValue(src);
-        }
-    }
-    public void setVerbose(boolean b) {
-        add12ArgIf(b, "-verbose");
-    }
-    public void setLocale(String src) {
-        if (!javadoc1) {
-            cmd.createArgument().setValue("-locale");
-            cmd.createArgument().setValue(src);
-        }
-    }
-    public void setEncoding(String enc) {
-        cmd.createArgument().setValue("-encoding");
-        cmd.createArgument().setValue(enc);
-    }
-    public void setVersion(boolean src) {
-        version = src;
-    }
-    public void setUse(boolean b) {
-        add12ArgIf(b, "-use");
-    }
-    public void setAuthor(boolean src) {
-        author = src;
-    }
-    public void setSplitindex(boolean b) {
-        add12ArgIf(b, "-splitindex");
-    }
-    public void setWindowtitle(String src) {
-        add12ArgIfNotEmpty("-windowtitle", src);
-    }
-    public void setDoctitle(String src) {
-        Html h = new Html();
-        h.addText(src);
-        addDoctitle(h);
-    }
-    public void addDoctitle(Html text) {
-        if (!javadoc1) {
-            doctitle = text;
-        }
-    }
-    public void setHeader(String src) {
-        Html h = new Html();
-        h.addText(src);
-        addHeader(h);
-    }
-    public void addHeader(Html text) {
-        if (!javadoc1) {
-            header = text;
-        }
-    }
-
-    public void setFooter(String src) {
-        Html h = new Html();
-        h.addText(src);
-        addFooter(h);
-    }
-    public void addFooter(Html text) {
-        if (!javadoc1) {
-            footer = text;
-        }
-    }
-
-    public void setBottom(String src) {
-        Html h = new Html();
-        h.addText(src);
-        addBottom(h);
-    }
-    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) {
-        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.
-     * 
-     * @todo Add -taglet as well - need to preserve the order
-     * of tag/taglet, so they need to be stored in the same list
-     */
-    public TagArgument createTag() {
-        if (!javadoc4) {
-            project.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) {   
-                        project.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]) {
-                            project.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;
-    }
-
-    public void execute() throws BuildException {
-        if ("javadoc2".equals(taskType)) {
-            log("!! javadoc2 is deprecated. Use javadoc instead. !!");
-        }
-
-        if (sourcePath == null) {
-            String msg = "sourcePath attribute must be set!";
-            throw new BuildException(msg);
-        }
-
-        log("Generating Javadoc", Project.MSG_INFO);
-
-        if (doctitle != null) {
-            cmd.createArgument().setValue("-doctitle");
-            cmd.createArgument().setValue(expand(doctitle.getText()));
-        }
-        if (header != null) {
-            cmd.createArgument().setValue("-header");
-            cmd.createArgument().setValue(expand(header.getText()));
-        }
-        if (footer != null) {
-            cmd.createArgument().setValue("-footer");
-            cmd.createArgument().setValue(expand(footer.getText()));
-        }
-        if (bottom != null) {
-            cmd.createArgument().setValue("-bottom");
-            cmd.createArgument().setValue(expand(bottom.getText()));
-        }
-
-        Commandline toExecute = (Commandline)cmd.clone();
-        toExecute.setExecutable( getJavadocExecutableName() );
-
-// ------------------------------------------------ general javadoc arguments
-        if (classpath == null) {
-            classpath = Path.systemClasspath;
-        } else {
-            classpath = classpath.concatSystemClasspath("ignore");
-        }
-
-        if (!javadoc1) {
-            toExecute.createArgument().setValue("-classpath");
-            toExecute.createArgument().setPath(classpath);
-            toExecute.createArgument().setValue("-sourcepath");
-            toExecute.createArgument().setPath(sourcePath);
-        } else {
-            toExecute.createArgument().setValue("-classpath");
-            toExecute.createArgument().setValue(sourcePath.toString() +
-                                                System.getProperty("path.separator") + classpath.toString());
-        }
-
-        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
-
-// XXX: how do we handle a custom 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) {
-                        toExecute.createArgument().setValue("-docletpath");
-                        toExecute.createArgument().setPath(doclet.getPath().concatSystemClasspath("ignore"));
-                    }
-                    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(); ) {
-                    TagArgument ta = (TagArgument) e.nextElement();
-                    toExecute.createArgument().setValue ("-tag");
-                    toExecute.createArgument().setValue (ta.getParameter());
-                }
-            }
-
-        }
-
-        tmpList = null;
-        if (packageNames.size() > 0) {
-            Vector packages = new Vector();
-            Enumeration enum = packageNames.elements();
-            while (enum.hasMoreElements()) {
-                PackageName pn = (PackageName) enum.nextElement();
-                String name = pn.getName().trim();
-                if (name.endsWith(".*")) {
-                    packages.addElement(name);
-                } else {
-                    toExecute.createArgument().setValue(name);
-                }
-            }
-
-            Vector excludePackages = new Vector();
-            if (excludePackageNames.size() > 0) {
-                enum = excludePackageNames.elements();
-                while (enum.hasMoreElements()) {
-                    PackageName pn = (PackageName) enum.nextElement();
-                    excludePackages.addElement(pn.getName().trim());
-                }
-            }
-            if (packages.size() > 0) {
-                evaluatePackages(toExecute, sourcePath, packages, excludePackages);
-            }
-        }
-
-        if (sourceFiles.size() > 0) {
-            PrintWriter srcListWriter = null;
-            try {
-
-                /**
-                 * Write sourcefiles 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 = sourceFiles.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) {
-                throw new BuildException("Error creating temporary file",
-                                         e, location);
-            } finally {
-                if (srcListWriter != null) {
-                    srcListWriter.close();
-                }
-            }
-        }
-
-        if (packageList != null) {
-            toExecute.createArgument().setValue("@" + packageList);
-        }
-        log("Javadoc args: " + toExecute, 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) {}
-        }
-    }
-
-    /**
-     * Given a source path, a list of package patterns, fill the given list
-     * with the packages found in that path subdirs matching one of the given
-     * patterns.
-     */
-    private void evaluatePackages(Commandline toExecute, Path sourcePath,
-                                  Vector packages, Vector excludePackages) {
-        log("Source path = " + sourcePath.toString(), Project.MSG_VERBOSE);
-        StringBuffer msg = new StringBuffer("Packages = ");
-        for (int i=0; i<packages.size(); i++) {
-            if (i > 0) {
-                msg.append(",");
-            }
-            msg.append(packages.elementAt(i));
-        }
-        log(msg.toString(), Project.MSG_VERBOSE);
-
-        msg.setLength(0);
-        msg.append("Exclude Packages = ");
-        for (int i=0; i<excludePackages.size(); i++) {
-            if (i > 0) {
-                msg.append(",");
-            }
-            msg.append(excludePackages.elementAt(i));
-        }
-        log(msg.toString(), Project.MSG_VERBOSE);
-
-        Vector addedPackages = new Vector();
-
-        String[] list = sourcePath.list();
-        if (list == null) {
-          list = new String[0];
-        }
-
-        FileSet fs = new FileSet();
-        fs.setDefaultexcludes(useDefaultExcludes);
-
-        Enumeration e = packages.elements();
-        while (e.hasMoreElements()) {
-            String pkg = (String)e.nextElement();
-            pkg = pkg.replace('.','/');
-            if (pkg.endsWith("*")) {
-                pkg += "*";
-            }
-
-            fs.createInclude().setName(pkg);
-        } // while
-
-        e = excludePackages.elements();
-        while (e.hasMoreElements()) {
-            String pkg = (String)e.nextElement();
-            pkg = pkg.replace('.','/');
-            if (pkg.endsWith("*")) {
-                pkg += "*";
-            }
-
-            fs.createExclude().setName(pkg);
-        }
-
-        PrintWriter packageListWriter = null;
-        try {
-            if (useExternalFile) {
-                tmpList = fileUtils.createTempFile("javadoc", "", null);
-                toExecute.createArgument().setValue("@" + tmpList.getAbsolutePath());
-                packageListWriter = new PrintWriter(new FileWriter(tmpList));
-            }
-
-
-            for (int j=0; j<list.length; j++) {
-                File source = project.resolveFile(list[j]);
-                fs.setDir(source);
-
-                DirectoryScanner ds = fs.getDirectoryScanner(project);
-                String[] packageDirs = ds.getIncludedDirectories();
-
-                for (int i=0; i<packageDirs.length; i++) {
-                    File pd = new File(source, packageDirs[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) {
-                        String pkgDir = packageDirs[i].replace('/','.').replace('\\','.');
-                        if (!addedPackages.contains(pkgDir)) {
-                            if (useExternalFile) {
-                                packageListWriter.println(pkgDir);
-                            } else {
-                                toExecute.createArgument().setValue(pkgDir);
-                            }
-                            addedPackages.addElement(pkgDir);
-                        }
-                    }
-                }
-            }
-        } catch (IOException ioex) {
-            throw new BuildException("Error creating temporary file",
-                                     ioex, location);
-        } finally {
-            if (packageListWriter != null) {
-                packageListWriter.close();
-            }
-        }
-    }
-
-    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);
-    }
-
-    private String getJavadocExecutableName()
-    {
-        // This is the most common extension case - exe for windows and OS/2,
-        // nothing for *nix.
-        String extension =  Os.isFamily("dos") ? ".exe" : "";
-
-        File jdocExecutable = null;
-
-        // On AIX using IBM's JDK 1.2 the javadoc executable is in
-        // the java.home/../sh directory
-        if (Os.isName("aix")) {
-            jdocExecutable = new File(System.getProperty("java.home") +
-                                      "/../sh/javadoc" + extension);
-        }
-        
-        if (jdocExecutable == null || !jdocExecutable.exists()) {
-            // Look for javadoc in the java.home/../bin directory.  
-            jdocExecutable = new File(System.getProperty("java.home") +
-                                      "/../bin/javadoc" + extension);
-        }
-
-        // 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.
-
-        if (jdocExecutable.exists() && !Os.isFamily("netware")) {
-            return jdocExecutable.getAbsolutePath();
-        } else {
-            if (!Os.isFamily("netware")) {
-                log( "Unable to locate " + jdocExecutable.getAbsolutePath() +
-                     ". Using \"javadoc\" instead.", Project.MSG_VERBOSE );
-            }
-            return "javadoc";
-        }
-    }
-
-}
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 c7a6315..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Jikes.java
+++ /dev/null
@@ -1,159 +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 196ce29..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/JikesOutputParser.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;
-
-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,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 29ea1ab..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/KeySubst.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;
-
-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>
- *
- * @deprecated KeySubst is deprecated. Use Filter + CopyDir 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 + CopyDir 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();
-            bw.close();
-            br.close();
-        } catch (IOException ioe) {
-            ioe.printStackTrace();
-        }       
-    }
-    /**
-        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();
-//                log ( "Name: " + name );
-//                log ( "Value: " + value );
-                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 1900e8e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/LoadFile.java
+++ /dev/null
@@ -1,256 +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 java.io.*;
-
-/**
- * Load a file into a property
- *
- * @author Steve Loughran
- *
- * @ant.task category="utility"
- */
-public 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;
-
-
-    /** flag to control if we flatten the file or no'
-     *
-     */
-    private boolean makeOneLine=false;
-
-    /**
-     * flag to control whether props get evaluated or not
-     */
-    private boolean evaluateProperties=false;
-
-    /**
-     * 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>
-     *
-     * @param encoding The new Encoding value
-     */
-
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-
-
-    /**
-     * Sets the Property attribute of the LoadFile object
-     *
-     * @param property The new Property value
-     */
-    public void setProperty(String property) {
-        this.property = property;
-    }
-
-
-    /**
-     * Sets the srcfile attribute.
-     *
-     * @param srcFile The new SrcFile value
-     */
-    public void setSrcFile(File srcFile) {
-        this.srcFile = srcFile;
-    }
-
-
-    /**
-     * Sets the Failonerror attribute of the LoadFile object
-     *
-     * @param fail The new Failonerror value
-     */
-    public void setFailonerror(boolean fail) {
-        failOnError = fail;
-    }
-
-    /**
-     * setter to flatten the file to a single line
-     * @since 1.6
-     */
-    public void setMakeOneLine(boolean makeOneLine) {
-        this.makeOneLine=makeOneLine;
-    }
-
-    /**
-     * setter to eval properties.
-     * @since 1.6
-     */
-    public void setEvaluateProperties(boolean evaluateProperties) {
-        this.evaluateProperties=evaluateProperties;
-    }
-
-
-    /**
-     * read in a source file to a property
-     *
-     * @exception BuildException if something goes wrong with the build
-     */
-    public 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 {
-            long len = srcFile.length();
-            log("file size = "+len,Project.MSG_DEBUG);
-            //discard most of really big files
-            if (len > Integer.MAX_VALUE) {
-                log("this file is far to big to load completely");
-            }
-            int size=(int) len;
-            char[] buffer = new char[size];
-            //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);
-            }
-            instream.read(buffer);
-            String text = new String(buffer);
-            if (makeOneLine) {
-                text=stripLineBreaks(text);
-            }
-            if(evaluateProperties) {
-                text = project.replaceProperties(text);
-            }
-            project.setNewProperty(property, text);
-            log("loaded "+buffer.length+" characters",Project.MSG_VERBOSE);
-            log(property+" := "+text,Project.MSG_DEBUG);
-
-        } catch (IOException ioe) {
-            String message = "Unable to load file: " + ioe.toString();
-            if (failOnError) {
-                throw new BuildException(message, ioe, location);
-            }
-            else {
-                log(message, Project.MSG_ERR);
-            }
-        } finally {
-            try {
-                if (fis != null) {
-                    fis.close();
-                }
-            } catch (IOException ioex) {
-            }
-        }
-    }
-
-    /**
-     * strip out all line breaks from a string.
-     * @param source source
-     * This implementation always duplicates the string; it is nominally possible to probe
-     * the string first looking for any line breaks before bothering to do a copy. But we assume if
-     * the option is requested, then line breaks are probably in the source string.
-     */
-    protected String stripLineBreaks(String source) {
-        //Linebreaks. What do to on funny IBM mainframes with odd line endings?
-        String linebreaks="\r\n";
-        int len=source.length();
-
-        StringBuffer dest=new StringBuffer(len);
-        for(int i=0;i<len;++i) {
-            char ch=source.charAt(i);
-            if(linebreaks.indexOf(ch)==-1) {
-                dest.append(ch);
-            }
-        }
-        return new String(dest);
-
-    }
-
-//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 471cbba..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/LogOutputStream.java
+++ /dev/null
@@ -1,153 +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.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
- */
-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 c131509..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/LogStreamHandler.java
+++ /dev/null
@@ -1,94 +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.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
- */
-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 d9ff1c7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Manifest.java
+++ /dev/null
@@ -1,880 +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.Task;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-/**
- * Class to manage Manifest information
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @ant.task category="java"
- */
-public class Manifest extends Task {
-    /** The standard manifest version header */
-    public final static String ATTRIBUTE_MANIFEST_VERSION = "Manifest-Version";
-
-    /** The standard Signature Version header */
-    public final static String ATTRIBUTE_SIGNATURE_VERSION = "Signature-Version";
-
-    /** The Name Attribute is the first in a named section */
-    public final static String ATTRIBUTE_NAME = "Name";
-
-    /** The From Header is disallowed in a Manifest */
-    public final static String ATTRIBUTE_FROM = "From";
-
-    /** The Class-Path Header is special - it can be duplicated */
-    public final static String ATTRIBUTE_CLASSPATH = "class-path";
-
-    /** Default Manifest version if one is not specified */
-    public final static String DEFAULT_MANIFEST_VERSION = "1.0";
-
-    /** The max length of a line in a Manifest */
-    public final static int MAX_LINE_LENGTH = 70;
-
-    /**
-     * Helper class for Manifest's mode attribute.
-     */
-    public static class Mode extends EnumeratedAttribute {
-        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 String value = null;
-
-        /**
-         * 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;
-            this.value = value;
-        }
-
-        public boolean equals(Object rhs) {
-            if (!(rhs instanceof Attribute)) {
-                return false;
-            }
-
-            Attribute rhsAttribute = (Attribute)rhs;
-            return (name != null && rhsAttribute.name != null &&
-                    name.toLowerCase().equals(rhsAttribute.name.toLowerCase()) &&
-                    value != null && value.equals(rhsAttribute.value));
-        }
-
-        /**
-         * 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);
-            value = 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;
-        }
-
-        /**
-         * Set the Attribute's value
-         *
-         * @param value the attribute's value
-         */
-        public void setValue(String value) {
-            this.value = value;
-        }
-
-        /**
-         * Get the Attribute's value
-         *
-         * @return the attribute's value.
-         */
-        public String getValue() {
-            return value;
-        }
-
-        /**
-         * 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.
-         */
-        public void addContinuation(String line) {
-            value += 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 {
-            String line = name + ": " + value;
-            while (line.getBytes().length > MAX_LINE_LENGTH) {
-                // try to find a MAX_LINE_LENGTH byte section
-                int breakIndex = MAX_LINE_LENGTH;
-                String section = line.substring(0, breakIndex);
-                while (section.getBytes().length > MAX_LINE_LENGTH && breakIndex > 0) {
-                    breakIndex--;
-                    section = line.substring(0, breakIndex);
-                }
-                if (breakIndex == 0) {
-                    throw new IOException("Unable to write manifest line " + name + ": " + value);
-                }
-                writer.println(section);
-                line = " " + line.substring(breakIndex);
-            }
-            writer.println(line);
-        }
-    }
-
-    /**
-     * 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 {
-        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();
-
-        /**
-         * 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");
-            }
-
-            for (Enumeration e = section.attributes.keys(); e.hasMoreElements();) {
-                String attributeName = (String)e.nextElement();
-                if (attributeName.equals(ATTRIBUTE_CLASSPATH) &&
-                        attributes.containsKey(attributeName)) {
-                    // classpath entries are vetors which are merged
-                    Vector classpathAttrs = (Vector)section.attributes.get(attributeName);
-                    Vector ourClasspathAttrs = (Vector)attributes.get(attributeName);
-                    for (Enumeration e2 = classpathAttrs.elements(); e2.hasMoreElements();) {
-                        ourClasspathAttrs.addElement(e2.nextElement());
-                    }
-                }
-                else {
-                    // the merge file always wins
-                    attributes.put(attributeName, section.attributes.get(attributeName));
-                }
-            }
-
-            // add in the warnings
-            for (Enumeration e = section.warnings.elements(); e.hasMoreElements();) {
-                warnings.addElement(e.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);
-            }
-            for (Enumeration e = attributes.elements(); e.hasMoreElements();) {
-                Object object = e.nextElement();
-                if (object instanceof Attribute) {
-                    Attribute attribute = (Attribute)object;
-                    attribute.write(writer);
-                }
-                else {
-                    Vector attrList = (Vector)object;
-                    for (Enumeration e2 = attrList.elements(); e2.hasMoreElements();) {
-                        Attribute attribute = (Attribute)e2.nextElement();
-                        attribute.write(writer);
-                    }
-                }
-            }
-            writer.println();
-        }
-
-        /**
-         * 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 Object getAttribute(String attributeName) {
-            return attributes.get(attributeName.toLowerCase());
-        }
-
-        /**
-         * 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) {
-            Object attribute = attributes.get(attributeName.toLowerCase());
-            if (attribute == null) {
-                return null;
-            }
-            if (attribute instanceof Attribute) {
-                return ((Attribute)attribute).getValue();
-            }
-            else {
-                String value = "";
-                for (Enumeration e = ((Vector)attribute).elements(); e.hasMoreElements();) {
-                    Attribute classpathAttribute = (Attribute)e.nextElement();
-                    value += classpathAttribute.getValue() + " ";
-                }
-                return value.trim();
-            }
-        }
-
-        /**
-         * Remove tge given attribute from the section
-         *
-         * @param attributeName the name of the attribute to be removed.
-         */
-        public void removeAttribute(String attributeName) {
-            attributes.remove(attributeName.toLowerCase());
-        }
-
-        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
-         *
-         * @throws 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.getName().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.getName().toLowerCase().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 attributeName = attribute.getName().toLowerCase();
-                if (attributeName.equals(ATTRIBUTE_CLASSPATH)) {
-                    Vector classpathAttrs = (Vector)attributes.get(attributeName);
-                    if (classpathAttrs == null) {
-                        classpathAttrs = new Vector();
-                        attributes.put(attributeName, classpathAttrs);
-                    }
-                    classpathAttrs.addElement(attribute);
-                }
-                else if (attributes.containsKey(attributeName)) {
-                    throw new ManifestException("The attribute \"" + attribute.getName() + "\" may not " +
-                                                "occur more than once in the same section");
-                }
-                else {
-                    attributes.put(attributeName, attribute);
-                }
-            }
-            return null;
-        }
-
-        public Enumeration getWarnings() {
-            return warnings.elements();
-        }
-
-        public boolean equals(Object rhs) {
-            if (!(rhs instanceof Section)) {
-                return false;
-            }
-
-            Section rhsSection = (Section)rhs;
-            if (attributes.size() != rhsSection.attributes.size()) {
-                return false;
-            }
-
-            for (Enumeration e = attributes.keys(); e.hasMoreElements();) {
-                String attributeName = (String)e.nextElement();
-                Object attributeValue  = attributes.get(attributeName);
-                Object rshAttributeValue = rhsSection.attributes.get(attributeName);
-                if (!attributeValue.equals(rshAttributeValue)) {
-                    return false;
-                }
-            }
-
-            return true;
-        }
-    }
-
-
-    /** 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();
-
-    /**
-     * Construct a manifest from Ant's default manifest file.
-     */
-    public static Manifest getDefaultManifest() throws BuildException {
-        try {
-            String s = "/org/apache/tools/ant/defaultManifest.mf";
-            InputStream in = Manifest.class.getResourceAsStream(s);
-            if (in == null) {
-                throw new BuildException("Could not find default manifest: " + s);
-            }
-            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 !!");
-        }
-        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 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);
-        }
-    }
-
-    public void addConfiguredSection(Section section) throws ManifestException {
-        if (section.getName() == null) {
-            throw new BuildException("Sections must have a name");
-        }
-        sections.put(section.getName(), section);
-    }
-
-    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;
-             }
-
-             for (Enumeration e = other.sections.keys(); 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) {
-                         sections.put(sectionName.toLowerCase(), 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.println(ATTRIBUTE_MANIFEST_VERSION + ": " + manifestVersion);
-        String signatureVersion = mainSection.getAttributeValue(ATTRIBUTE_SIGNATURE_VERSION);
-        if (signatureVersion != null) {
-            writer.println(ATTRIBUTE_SIGNATURE_VERSION + ": " + signatureVersion);
-            mainSection.removeAttribute(ATTRIBUTE_SIGNATURE_VERSION);
-        }
-        mainSection.write(writer);
-        if (signatureVersion != null) {
-            try {
-                mainSection.addConfiguredAttribute(new Attribute(ATTRIBUTE_SIGNATURE_VERSION, signatureVersion));
-            }
-            catch (ManifestException e) {
-                // shouldn't happen - ignore
-            }
-        }
-
-        for (Enumeration e = sections.elements(); e.hasMoreElements();) {
-            Section section = (Section)e.nextElement();
-            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();
-
-        for (Enumeration e2 = mainSection.getWarnings(); e2.hasMoreElements();) {
-            warnings.addElement(e2.nextElement());
-        }
-
-        // create a vector and add in the warnings for all the sections
-        for (Enumeration e = sections.elements(); e.hasMoreElements();) {
-            Section section = (Section)e.nextElement();
-            for (Enumeration e2 = section.getWarnings(); e2.hasMoreElements();) {
-                warnings.addElement(e2.nextElement());
-            }
-        }
-
-        return warnings.elements();
-    }
-
-    public boolean equals(Object rhs) {
-        if (!(rhs instanceof Manifest)) {
-            return false;
-        }
-
-        Manifest rhsManifest = (Manifest)rhs;
-        if (manifestVersion == null) {
-            if (rhsManifest.manifestVersion != null) {
-                return false;
-            }
-        } else if (!manifestVersion.equals(rhsManifest.manifestVersion)) {
-            return false;
-        }
-        if (sections.size() != rhsManifest.sections.size()) {
-            return false;
-        }
-
-        if (!mainSection.equals(rhsManifest.mainSection)) {
-            return false;
-        }
-
-        for (Enumeration e = sections.elements(); e.hasMoreElements();) {
-            Section section = (Section)e.nextElement();
-            Section rhsSection = (Section)rhsManifest.sections.get(section.getName());
-            if (!section.equals(rhsSection)) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    private File manifestFile;
-
-    /**
-     * The name of the manifest file to write (if used as a task).
-     */
-    public void setFile(File f) {
-        manifestFile = f;
-    }
-
-    private Mode mode;
-
-    /**
-     * Shall we update or replace an existing manifest?
-     */
-    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 sections.keys();
-    }
-
-    /**
-     * Create or update the Manifest when used as a task.
-     */
-    public void execute() throws BuildException {
-        if (manifestFile == null) {
-            throw new BuildException("the file attribute is required");
-        }
-
-        Manifest toWrite = getDefaultManifest();
-
-        if (mode.getValue().equals("update") && manifestFile.exists()) {
-            FileReader f = null;
-            try {
-                f = new FileReader(manifestFile);
-                toWrite.merge(new Manifest(f));
-            } catch (ManifestException m) {
-                throw new BuildException("Existing manifest "+manifestFile
-                                         + " is invalid", m, location);
-            } catch (IOException e) {
-                throw new BuildException("Failed to read "+manifestFile,
-                                         e, location);
-            } finally {
-                if (f != null) {
-                    try {
-                        f.close();
-                    } catch (IOException e) {}
-                }
-            }
-        }
-
-        try {
-            toWrite.merge(this);
-        } catch (ManifestException m) {
-            throw new BuildException("Manifest is invalid", m, location);
-        }
-
-        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 05a920a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ManifestException.java
+++ /dev/null
@@ -1,73 +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;
-
-
-
-
-/**
- * Exception thrown indicating problems in a JAR Manifest
- *
- * @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
- */
-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 b5bdea1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/MatchingTask.java
+++ /dev/null
@@ -1,221 +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.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;
-import java.util.Vector;
-
-/**
- * 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>
- */
-
-public abstract class MatchingTask extends Task {
-
-    protected boolean useDefaultExcludes = true;
-    protected FileSet fileset = new FileSet();
-
-    /**
-     * 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 db53da1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Mkdir.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.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
- *
- * @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 73a6098..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Move.java
+++ /dev/null
@@ -1,309 +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;
-import java.util.Vector;
-
-/**
- * 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$
- *
- * @ant.task category="filesystem"
- */
-public class Move extends Copy {
-
-    private Vector filterSets = null;
-
-    public Move() {
-        super();
-        forceOverwrite = true;
-    }
-
-//************************************************************************
-//  protected and private methods
-//************************************************************************
-
-    protected void doFileOperations() {
-        filterSets = getFilterSets();
-
-        //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,
-                                                    forceOverwrite,
-                                                    getPreserveLastModified(),
-                                                    getEncoding());
-
-                            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 (filterSets != null && filterSets.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 9e3dbc2..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>
- */
-
-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 1aebb97..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Parallel.java
+++ /dev/null
@@ -1,185 +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 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 <a href="mailto:conor@apache.org">Conor MacNeill </a>
- *
- * @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();
-        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 BuildException && 
-                        firstLocation == Location.UNKNOWN_LOCATION) {
-                    firstLocation = ((BuildException)t).getLocation();
-                }
-                exceptionMessage.append(lSep);
-                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 6b6c0b4..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Patch.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;
-
-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>
- *
- * @ant.task category="utility"
- */
-public class Patch extends Task {
-
-    private File originalFile;
-    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");
-        }
-    }
-
-    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);
-        exe.setCommandline(toExecute.getCommandline());
-        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 2ffd58e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/PathConvert.java
+++ /dev/null
@@ -1,387 +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.types.Path;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.types.FileSet;
-
-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.
- * <p>
- * LIMITATION: Currently this implementation groups all machines into one of two
- * types: Unix or Windows.  Unix is defined as NOT windows.
- *
- * @author Larry Streepy <a href="mailto:streepy@healthlanguage.com">streepy@healthlanguage.com</a>
- *
- * @ant.task category="utility"
- */
-public class PathConvert extends Task {
-
-    /**
-     * Helper class, holds the nested <map> values.  Elements will look like this:
-     * &lt;map from="d:" to="/foo"/>
-     * <p>
-     * When running on windows, the prefix comparison will be case insensitive.
-     */
-    public class MapEntry {
-
-        /**
-         * Set the "from" attribute of the map entry
-         */
-        public void setFrom( String from ) {
-            this.from = from;
-        }
-
-        /**
-         * Set the "to" 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;
-    }
-
-    /**
-     * 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
-     */
-    public void setTargetos( String target ) {
-
-        targetOS = target.toLowerCase();
-
-        if( ! targetOS.equals( "windows" ) && ! target.equals( "unix" ) && 
-            ! targetOS.equals( "netware" )) {
-            throw new BuildException( "targetos must be one of 'unix', 'netware', or 'windows'" );
-        }
-
-        // Currently, we deal with only two path formats: Unix and Windows
-        // And Unix is everything that is not Windows
-
-        // for NetWare, 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("windows") || targetOS.equals("netware"));
-    }
-
-    /**
-     * Set the value of the proprty 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 or FILESET 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 {
-
-        // If we are a reference, the 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 {
-                throw new BuildException( "'refid' does not refer to a path or fileset" );
-            }
-        }
-
-        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 below)
-
-        String osname = System.getProperty("os.name").toLowerCase();
-
-        // for NetWare, 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.
-        onWindows = ( (osname.indexOf("windows") >= 0) ||
-                      (osname.indexOf("netware") >= 0)  );
-
-        // Determine the from/to char mappings for dir sep
-        char fromDirSep = onWindows ? '\\' : '/';
-        char toDirSep   = dirSep.charAt(0);
-
-        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.
-
-            elem = elem.replace( fromDirSep, toDirSep );
-
-            if( i != 0 ) {
-              rslt.append( pathSep );
-            }
-            rslt.append( elem );
-        }
-
-        // Place the result into the specified property
-        String value = rslt.toString();
-
-        log( "Set property " + property + " = " + value, Project.MSG_VERBOSE );
-
-        getProject().setNewProperty( property, value );
-    }
-
-    /**
-     * 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 refid");
-    }
-
-
-    // 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
-}
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 2f8c9c2..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ProcessDestroyer.java
+++ /dev/null
@@ -1,138 +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.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>
- */
-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 551404d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Property.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;
-
-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>
- */
-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();
-    }
-
-    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);
-        try {
-            ClassLoader cL = null;
-            InputStream is = 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);
-        }
-    }
-
-    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 3d3d93f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/PumpStreamHandler.java
+++ /dev/null
@@ -1,150 +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.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
- */
-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 dbb7ae0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Recorder.java
+++ /dev/null
@@ -1,234 +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.
- * @see RecorderEntry
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- * @version 0.5
- *
- * @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;
-    /** 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);
-    }
-
-    /**
-     * 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 );
-    }
-
-    //////////////////////////////////////////////////////////////////////
-    // 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 final static 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 final static 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 10c77c3..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java
+++ /dev/null
@@ -1,232 +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.BuildLogger;
-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
- *
- */
-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;
-
-    //////////////////////////////////////////////////////////////////////
-    // 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() + "]";
-            /** @todo replace 12 with DefaultLogger.LEFT_COLUMN_SIZE */
-            for ( int i = 0; i < (12 - name.length()); i++ ) {
-                buf.append( " " );
-            } // for
-            buf.append( name );
-        } // 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) {
-        throw new java.lang.RuntimeException("Method setEmacsMode() not yet implemented.");
-    }
-
-    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 5d9d0e1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Rename.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;
-
-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.  Use move instead.
- */
-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 wheter 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 ecf6f2f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Replace.java
+++ /dev/null
@@ -1,532 +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 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.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>
- *
- * @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 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 {
-        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);
-        }
-    }
-    
-    /**
-     * 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 linesep = System.getProperty("line.separator");
-                String val = stringReplace(value.getText(), "\n", linesep);
-                String tok = stringReplace(token.getText(), "\n", linesep);
-
-                // 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;
-    }
-    
-    
-    /**
-     * 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 fee4219..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Rmic.java
+++ /dev/null
@@ -1,543 +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.Path;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.util.FileNameMapper;
-import org.apache.tools.ant.util.SourceFileScanner;
-
-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
- *
- * @ant.task category="java"
- */
-
-public class Rmic extends MatchingTask {
-
-    private final static String FAIL_MSG 
-        = "Rmic failed, messages should have been provided.";
-
-    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;
-
-    /** 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;
-    }
-
-    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);
-        }
-
-        String compiler = project.getProperty("build.rmic");
-        RmicAdapter adapter = RmicAdapterFactory.getRmic(compiler, this );
-            
-        // now we need to populate the compiler adapter
-        adapter.setRmic( this );
-
-        Path classpath = adapter.getClasspath();
-        loader = new AntClassLoader(project, classpath);
-
-        // 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)) {
-            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);
-                }
-            }
-        }
-        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++) {
-            String sourceFileName = 
-                classFileName.substring(0, classFileName.length()-6) + ".java";
-            File oldFile = new File(baseDir, sourceFileName);
-            File newFile = new File(sourceBaseFile, sourceFileName);
-            try {
-                project.copyFile(oldFile, newFile, filtering);
-                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;}
-
-}
-
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 4072d8e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/SQLExec.java
+++ /dev/null
@@ -1,794 +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>
- *
- * @ant.task name="sql" category="database"
- */
-public class SQLExec extends Task {
-
-    public static class DelimiterType extends EnumeratedAttribute {
-        public final static String NORMAL = "normal";
-        public final static String ROW = "row";
-        public String[] getValues() {
-            return new String[] {NORMAL, ROW};
-        }
-    }
-
-    /**
-     * 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);
-
-    public boolean caching = true;
-
-    private int goodSql = 0;
-
-    private int totalSql = 0;
-
-    private Path classpath;
-
-    private AntClassLoader loader;
-
-    private Vector filesets = new Vector();
-
-    /**
-     * Database connection
-     */
-    private Connection conn = null;
-    
-    /**
-     * Autocommit flag. Default value is false
-     */
-    private boolean autocommit=false;
-    
-    /**
-     * SQL statement
-     */
-    private Statement statement = null;
-
-    /**
-     * DB driver.
-     */
-    private String driver = null;
-
-    /**
-     * DB url.
-     */
-    private String url = null;
-
-    /**
-     * User name.
-     */
-    private String userId = null;
-
-    /**
-     * Password
-     */
-    private String password = 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;
-
-    /**
-     * RDBMS Product needed for this SQL.
-     **/
-    private String rdbms = null;
-
-    /**
-     * RDBMS Version needed for this SQL.
-     **/
-    private String version = 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;
-
-
-    public void setCaching(boolean value){
-        caching = value;
-    }
-
-    /**
-     * Set the classpath for loading the driver.
-     */
-    public void setClasspath(Path classpath) {
-        if (this.classpath == null) {
-            this.classpath = classpath;
-        } else {
-            this.classpath.append(classpath);
-        }
-    }
-
-    /**
-     * 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);
-    }
-    
-    /**
-     * 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 JDBC driver to be used.
-     */
-    public void setDriver(String driver) {
-        this.driver = driver;
-    }
-    
-    /**
-     * Set the DB connection url.
-     */
-    public void setUrl(String url) {
-        this.url = url;
-    }
-    
-    /**
-     * Set the user name for the DB connection.
-     */
-    public void setUserid(String userId) {
-        this.userId = userId;
-    }
-
-    /**
-     * 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 password for the DB connection.
-     */
-    public void setPassword(String password) {
-        this.password = password;
-    }
-    
-    /**
-     * Set the autocommit flag for the DB connection.
-     */
-    public void setAutocommit(boolean autocommit) {
-        this.autocommit = autocommit;
-    }
-
-    /**
-     * 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. 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.
-     */
-    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;
-    }
-
-    /**
-     * Set the rdbms required
-     */
-    public void setRdbms(String vendor) {
-        this.rdbms = vendor.toLowerCase();
-    }
-
-    /**
-     * Set the version required
-     */
-    public void setVersion(String version) {
-        this.version = version.toLowerCase();
-    }
-
-    /**
-     * 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 {
-        sqlCommand = sqlCommand.trim();
-
-        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);
-            }
-        } else { 
-            // 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);
-        }
-
-        if (driver == null) {
-            throw new BuildException("Driver attribute must be set!", location);
-        }
-        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);
-        }
-        if (srcFile != null && !srcFile.exists()) {
-            throw new BuildException("Source file does not exist!", 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);
-        }
-
-        try{
-            log("connecting to " + url, Project.MSG_VERBOSE );
-            Properties info = new Properties();
-            info.put("user", userId);
-            info.put("password", password);
-            conn = driverInstance.connect(url, info);
-
-            if (conn == null) {
-                // Driver doesn't understand the URL
-                throw new SQLException("No suitable Driver for "+url);
-            }
-
-            if (!isValidRdbms(conn)) {
-              return;
-            }
-
-            conn.setAutoCommit(autocommit);
-
-            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)));
-                }
-                        
-                // Process all transactions
-                for (Enumeration e = transactions.elements(); 
-                     e.hasMoreElements();) {
-                       
-                    ((Transaction) e.nextElement()).runTransaction(out);
-                    if (!autocommit) {
-                        log("Commiting transaction", Project.MSG_VERBOSE);
-                        conn.commit();
-                    }
-                }
-            }
-            finally {
-                if (out != null && out != System.out) {
-                    out.close();
-                }
-            }
-        } catch(IOException e){
-            if (!autocommit && conn != null && onError.equals("abort")) {
-                try {
-                    conn.rollback();
-                } catch (SQLException ex) {}
-            }
-            throw new BuildException(e, location);
-        } catch(SQLException e){
-            if (!autocommit && 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");
-    }
-
-    protected void runStatements(Reader reader, PrintStream out) throws SQLException, IOException {
-        String sql = "";
-        String line = "";
- 
-        BufferedReader in = new BufferedReader(reader);
- 
-        try{
-            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);
-            }
-        }catch(SQLException e){
-            throw e;
-        }
-
-    }
- 
-    /**
-     * 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) {
-                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;
-    }
-    
-    /**
-     * 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);
-                runStatements(reader, out);
-                reader.close();
-            }
-        }
-    }
-
-    protected static Hashtable getLoaderMap(){
-        return loaderMap;
-    }
-
-    protected AntClassLoader getLoader(){
-        return loader;
-    }
-
-}
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 d071db6..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>
- *
- * @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 fc68266..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>
- *
- * @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 3477c7e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/SignJar.java
+++ /dev/null
@@ -1,324 +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;
-
-/**
- * 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>
- *
- * @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).
-     */
-    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 (Project.getJavaVersion().equals(Project.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 4350fa0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Sleep.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;
-
-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
- *
- * @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 999979c..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
- */
-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 final static int SLEEP = 5;
-    private final static 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 03eee48..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Tar.java
+++ /dev/null
@@ -1,519 +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.FileInputStream;
-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;
-
-/**
- * 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>
- *
- * @ant.task category="packaging"
- */
-
-public class Tar extends MatchingTask {
-
-    /**
-     * @deprecated Tar.WARN is deprecated and is replaced with
-     *             Tar.TarLongFileMode.WARN
-     */
-    public final static String WARN = "warn";
-    /**
-     * @deprecated Tar.FAIL is deprecated and is replaced with
-     *             Tar.TarLongFileMode.FAIL
-     */
-    public final static String FAIL = "fail";
-    /**
-     * @deprecated Tar.TRUNCATE is deprecated and is replaced with
-     *             Tar.TarLongFileMode.TRUNCATE
-     */
-    public final static String TRUNCATE = "truncate";
-    /**
-     * @deprecated Tar.GNU is deprecated and is replaced with
-     *             Tar.TarLongFileMode.GNU
-     */
-    public final static String GNU = "gnu";
-    /**
-     * @deprecated Tar.OMIT is deprecated and is replaced with
-     *             Tar.TarLongFileMode.OMIT
-     */
-    public final static 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;
-
-    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) {
-        //log("DEPRECATED - The tarfile attribute is deprecated. Please use the destfile attribute instead.");
-        this.tarFile = tarFile;
-    }
-
-    /**
-     * Sets the destfile attribute.
-     * @since 1.22 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;
-    }
-
-    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);
-        }
-
-        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 basdir attribute or some nested filesets.",
-                                     location);
-        }
-
-        // check if tr 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(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) {}
-            }
-        }
-    }
-
-    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 final static String WARN = "warn";
-        public final static String FAIL = "fail";
-        public final static String TRUNCATE = "truncate";
-        public final static String GNU = "gnu";
-        public final static 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());
-        }
-    }
-}
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 ea5670d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/TaskOutputStream.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.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 fc1c3f5..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>
- *
- * @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/Touch.java b/src/main/org/apache/tools/ant/taskdefs/Touch.java
deleted file mode 100644
index f2d4e56..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Touch.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.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 java.io.File;
-import java.io.FileOutputStream;
-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>
- *
- * @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 {
-        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.");
-        }
-
-        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();
-    }
-
-    /**
-     * 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 {
-                    FileOutputStream fos = new FileOutputStream(file);
-                    fos.write(new byte[0]);
-                    fos.close();
-                } catch (IOException ioe) {
-                    throw new BuildException("Could not create "+file, ioe, 
-                                             location);
-                }
-            }
-        }
-
-        if (millis >= 0 && Project.getJavaVersion() == Project.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 (Project.getJavaVersion() == Project.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 22d1145..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Transform.java
+++ /dev/null
@@ -1,64 +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> 
- *
- * @ant.task name="apply" category="control"
- */
-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 32be726..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Tstamp.java
+++ /dev/null
@@ -1,283 +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@cognet.com.au
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- *
- * @ant.task category="utility"
- */
-public class Tstamp extends Task {
-
-    private Vector customFormats = new Vector();
-    private String prefix = "";
-
-    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 final static String MILLISECOND = "millisecond";
-        private final static String SECOND = "second";
-        private final static String MINUTE = "minute";
-        private final static String HOUR = "hour";
-        private final static String DAY = "day";
-        private final static String WEEK = "week";
-        private final static String MONTH = "month";
-        private final static String YEAR = "year";
-
-        private final static 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 1114bc6..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>
- *
- * @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 b0f9225..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Unpack.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 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>
- */
-
-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 {
-        validate();
-        extract();
-    }
-
-    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 902b3c9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Untar.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 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.IOException;
-
-
-/**
- * Untar a file.
- *
- * Heavily based on the Expand task.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- *
- * @ant.task category="packaging"
- */
-public class Untar extends Expand {
-
-    protected void expandFile(FileUtils fileUtils, File srcF, File dir) {
-        TarInputStream tis = null;
-        try {
-            log("Expanding: " + srcF + " into " + dir, Project.MSG_INFO);
-
-            tis = new TarInputStream(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) {}
-            }
-        }
-    }
-}
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 f66e6ea..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/UpToDate.java
+++ /dev/null
@@ -1,208 +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.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>
- *
- * @ant.task category="control"
- */
-
-public class UpToDate extends MatchingTask implements Condition {
-
-    private String _property;
-    private String _value;
-    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 files.
-     *
-     * @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 files. 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 files
-     * if the property is to be set.
-     *
-     * @param file the file which we are checking against.
-     */
-    public void setTargetFile(File file) {
-        _targetFile = 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 files, see if the targets are up-to-date.
-     */
-    public boolean eval() {
-        if (sourceFileSets.size() == 0) {
-          throw new BuildException("At least one <srcfiles> element must be set");
-        }
-
-        if (_targetFile == null && mapperElement == null) {
-          throw new BuildException("The targetfile attribute or a nested mapper element must be set");
-        }
-
-        // if not there then it can't be up to date
-        if (_targetFile != null && !_targetFile.exists()) {
-          return false;
-        } 
-
-        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());
-        }
-        return upToDate;
-    }
-
-
-    /**
-     * Sets property to true if target files have a more recent timestamp than
-     * each of the corresponding source files.
-     */
-    public void execute() throws BuildException {
-        boolean upToDate = eval();
-        if (upToDate) {
-            this.project.setProperty(_property, this.getValue());
-            if (mapperElement == null) {
-                log("File \"" + _targetFile.getAbsolutePath() + "\" is up to date.",
-                    Project.MSG_VERBOSE);
-            } else {
-                log("All target files have been 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 8ba3230..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/WaitFor.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.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>
- *
- * @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();
-
-        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");
-        }
-    }
-
-    public static class Unit extends EnumeratedAttribute {
-
-        private final static String MILLISECOND = "millisecond";
-        private final static String SECOND = "second";
-        private final static String MINUTE = "minute";
-        private final static String HOUR = "hour";
-        private final static String DAY = "day";
-        private final static String WEEK = "week";
-
-        private final static 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 d0b15ce..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/War.java
+++ /dev/null
@@ -1,166 +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> 
- *
- * @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) {
-        log("DEPRECATED - The warfile attribute is deprecated. Use destfile attribute instead.");
-        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 1f94f72..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/XSLTLiaison.java
+++ /dev/null
@@ -1,108 +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
- */
-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.
-     */
-    String FILE_PROTOCOL_PREFIX = "file://";
-
-    /**
-     * set the stylesheet to use for the transformation.
-     * @param stylesheet the stylesheet to be used for transformation.
-     */
-    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.
-     */
-    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
-     */
-    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)
-     */
-    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 e293b7b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/XSLTLogger.java
+++ /dev/null
@@ -1,62 +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;
-
-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 8ac2ab4..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/XSLTLoggerAware.java
+++ /dev/null
@@ -1,59 +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;
-
-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 9ebba9f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
+++ /dev/null
@@ -1,526 +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.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;
-
-
-/**
- * A Task to process via XSLT a set of XML documents. This is
- * useful for building views of XML based documentation.
- * arguments:
- * <ul>
- * <li>basedir
- * <li>destdir
- * <li>style
- * <li>includes
- * <li>excludes
- * </ul>
- * Of these arguments, the <b>sourcedir</b> and <b>destdir</b> are required.
- * <p>
- * This task will recursively scan the sourcedir and destdir
- * looking for XML documents to process via XSLT. Any other files,
- * such as images, or html files in the source directory will be
- * copied into the destination directory.
- *
- * @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="stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @ant.task name="style" category="xml"
- */
-
-public class XSLTProcess extends MatchingTask implements XSLTLogger {
-
-    private File destDir = null;
-
-    private File baseDir = null;
-
-    private String xslFile = null;
-
-    private String targetExtension = ".html";
-    private Vector params = new Vector();
-
-    private File inFile = null;
-
-    private File outFile = null;
-
-    private String processor;
-    private Path classpath = null;
-    private XSLTLiaison liaison;
-    private boolean stylesheetLoaded = false;
-
-    private boolean force = false;
-
-    private FileUtils fileUtils;
-
-    private String outputtype = null;
-
-    /**
-     * Whether to style all files in the included directories as well.
-     *
-     * @since 1.35, 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.
-     *
-     * @since 1.35, Ant 1.5
-     */
-    public void setScanIncludedDirectories(boolean b) {
-        performDirectoryScan = b;
-    }
-    
-    /**
-     * Executes the task.
-     */
-    public void execute() throws BuildException {
-        DirectoryScanner scanner;
-        String[]         list;
-        String[]         dirs;
-
-        if (xslFile == null) {
-            throw new BuildException("no stylesheet specified", location);
-        }
-
-        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 );
-                }
-            }
-        }
-    } //-- execute
-
-    /**
-     * Set whether to check dependencies, or always generate.
-     **/
-    public void setForce(boolean force) {
-        this.force = force;
-    } //-- setForce
-
-    /**
-     * Set the base directory.
-     **/
-    public void setBasedir(File dir) {
-        baseDir = dir;
-    } //-- setSourceDir
-
-    /**
-     * 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;
-    } //-- setDestDir
-
-    /**
-     * Set the desired file extension to be used for the target
-     * @param name the extension to use
-     **/
-    public void setExtension(String name) {
-        targetExtension = name;
-    } //-- setDestDir
-
-    /**
-     * Sets the file to use for styling relative to the base directory
-     * of this task.
-     */
-    public void setStyle(String xslFile) {
-        this.xslFile = xslFile;
-    }
-
-    /**
-     * Set the classpath to load the Processor through (attribute).
-     */
-    public void setClasspath(Path classpath) {
-        createClasspath().append(classpath);
-    }
-
-    /**
-     * Set the classpath to load the Processor through (nested element).
-     */
-    public Path createClasspath() {
-        if (classpath == null) {
-            classpath = new Path(project);
-        }
-        return classpath.createPath();
-    }
-
-    /**
-     * Set the classpath to load the Processor through via reference
-     * (attribute).
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-
-    public void setProcessor(String processor) {
-        this.processor = processor;
-    }
-
-    /**
-     * Load processor here instead of in setProcessor - this will be
-     * called from within execute, so we have access to the latest
-     * classpath.
-     */
-    private void resolveProcessor(String proc) throws Exception {
-        if (proc.equals("trax")) {
-            final Class clazz =
-                loadClass("org.apache.tools.ant.taskdefs.optional.TraXLiaison");
-            liaison = (XSLTLiaison)clazz.newInstance();
-        } else if (proc.equals("xslp")) {
-            log("DEPRECATED - xslp processor is deprecated. Use trax or xalan instead.");
-            final Class clazz =
-                loadClass("org.apache.tools.ant.taskdefs.optional.XslpLiaison");
-            liaison = (XSLTLiaison) clazz.newInstance();
-        } else if (proc.equals("xalan")) {
-            final Class clazz =
-                loadClass("org.apache.tools.ant.taskdefs.optional.XalanLiaison");
-            liaison = (XSLTLiaison)clazz.newInstance();
-        } else {
-            liaison = (XSLTLiaison) loadClass(proc).newInstance();
-        }
-    }
-
-    /**
-     * Load named class either via the system classloader or a given
-     * custom classloader.
-     */
-    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
-     */
-    public void setOut(File outFile){
-        this.outFile = outFile;
-    }
-
-    /**
-     * Sets an input xml file to be styled
-     */
-    public void setIn(File inFile){
-        this.inFile = inFile;
-    }
-
-    /**
-     * Processes the given input XML file and stores the result
-     * in the given resultFile.
-     */
-    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
-
-    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);
-        }
-    }
-
-    private void ensureDirectoryFor( File targetFile ) throws BuildException {
-        File directory = new File( targetFile.getParent() );
-        if (!directory.exists()) {
-            if (!directory.mkdirs()) {
-                throw new BuildException("Unable to create directory: "
-                                         + directory.getAbsolutePath() );
-            }
-        }
-    }
-
-    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;
-    }
-
-    public Param createParam() {
-        Param p = new Param();
-        params.addElement(p);
-        return p;
-    }
-
-    public class Param {
-        private String name=null;
-        private String expression=null;
-
-        public void setName(String name){
-            this.name = name;
-        }
-
-        public void setExpression(String expression){
-            this.expression = expression;
-        }
-
-        public String getName() throws BuildException{
-            if(name==null) {
-             throw new BuildException("Name attribute is missing.");
-            }
-            return name;
-        }
-
-        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;
-    }
-
-    /**
-     * Loads the stylesheet and set xsl:param parameters.
-     */
-    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() );
-            }
-        } 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/Zip.java b/src/main/org/apache/tools/ant/taskdefs/Zip.java
deleted file mode 100644
index c580e26..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Zip.java
+++ /dev/null
@@ -1,877 +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.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.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>
- *
- * @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();
-    protected String duplicate = "add";
-    private boolean doCompress = true;
-    private boolean doUpdate = false;
-    private boolean doFilesonly = false;
-    protected String archiveType = "zip";
-
-    // For directories:
-    private final static 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;
-
-    /**
-     * 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) {
-        log("DEPRECATED - The zipfile attribute is deprecated. Use destfile attribute instead.");
-        setDestFile(zipFile);
-    }
-
-    /**
-     * This is the name/location of where to
-     * create the .zip file.
-     * @since 1.5alpha
-     * @deprecated Use setDestFile(File) instead
-     */
-    public void setFile(File file) {
-        log("DEPRECATED - The file attribute has been renamed destfile.",
-            Project.MSG_ERR);
-        setDestFile(file);
-    }
-
-
-    /**
-     * Sets the destfile attribute.
-     * @since 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;
-    }
-
-    /**
-     * 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.add(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);
-
-        // 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());
-
-        boolean success = false;
-        try {
-            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);
-
-                    StringBuffer exclusionPattern = new StringBuffer();
-                    for (int i=0; i < addedFiles.size(); i++)
-                    {
-                        if (i != 0) {
-                            exclusionPattern.append(",");
-                        }
-                        exclusionPattern.append((String)addedFiles.elementAt(i));
-                    }
-                    oldFiles.setExcludes(exclusionPattern.toString());
-                    Vector tmp = new Vector();
-                    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 may 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 may 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);
-        try {
-            OutputStream os = new FileOutputStream(zipFile);
-            try {
-                // 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);
-            } finally {
-                os.close();
-            }
-        } catch (IOException ioe) {
-            throw new BuildException("Could not create empty ZIP archive", ioe, location);
-        }
-        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>
-     */
-    protected void cleanUp() {
-        addedDirs.clear();
-        addedFiles.clear();
-        filesets.clear();
-        zipFile = null;
-        baseDir = null;
-        entries.clear();
-        groupfilesets.clear();
-        duplicate = "add";
-        archiveType = "zip";
-        doCompress = true;
-        emptyBehavior = "skip";
-        doUpdate = false;
-        doFilesonly = false;
-        addingNewFiles = 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 8e6d8e0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapter.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.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>
- */
-
-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 560ae25..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
+++ /dev/null
@@ -1,167 +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.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-
-/**
- * Creates the necessary compiler adapter, given basic criteria.
- *
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- */
-public class CompilerAdapterFactory {
-
-    /** This is a singlton -- 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 = the new 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><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 {
-            /* If I've done things right, this should be the extent of the
-             * conditional statements required.
-             */
-            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")) {
-                return new Javac12();
-            }
-            if ( compilerType.equalsIgnoreCase("modern") ||
-                    compilerType.equalsIgnoreCase("javac1.3") ||
-                    compilerType.equalsIgnoreCase("javac1.4")) {
-                // does the modern compiler exist?
-                try {
-                    Class.forName("com.sun.tools.javac.Main");
-                } catch (ClassNotFoundException cnfe) {
-                    task.log("Modern compiler is not available - using "
-                            + "classic compiler", Project.MSG_WARN);
-                    return new Javac12();
-                }
-                return new Javac13();
-            }
-            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 );
-        }
-
-    /**
-     * 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( 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/compilers/DefaultCompilerAdapter.java b/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
deleted file mode 100644
index 3d28fe2..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
+++ /dev/null
@@ -1,452 +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 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>
- */
-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();
-
-    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();
-    }
-
-    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;
-        }
-
-        // we cannot be using Java 1.0 when forking, so we only have to
-        // distinguish between Java 1.1, and Java 1.2 and higher, as Java 1.1
-        // has its own parameter format
-        boolean usingJava1_1 = Project.getJavaVersion().equals(Project.JAVA_1_1);
-        String memoryParameterPrefix = usingJava1_1 ? "-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 (Project.getJavaVersion().startsWith("1.1")) {
-            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
-                && Project.getJavaVersion() != Project.JAVA_1_0
-                && Project.getJavaVersion() != Project.JAVA_1_1) {
-
-                String debugLevel = attributes.getDebugLevel();
-                if (debugLevel != null) {
-                    cmd.createArgument().setValue("-g:" + debugLevel);
-                } else {
-                    cmd.createArgument().setValue("-g");
-                }
-            } else {
-                cmd.createArgument().setValue("-g");
-            }
-        } else if (Project.getJavaVersion() != Project.JAVA_1_0 &&
-                   Project.getJavaVersion() != Project.JAVA_1_1) {
-            cmd.createArgument().setValue("-g:none");
-        }
-        if (optimize) {
-            cmd.createArgument().setValue("-O");
-        }
-
-        if (depend) {
-            if (Project.getJavaVersion().startsWith("1.1")) {
-                cmd.createArgument().setValue("-depend");
-            } else if (Project.getJavaVersion().startsWith("1.2")) {
-                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 args: " + cmd.toString(),
-            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 {
-                    tmpFile = fileUtils.createTempFile("jikes", "", null);
-                    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.getAbsolutePath();
-                } 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());
-    }
-
-}
-
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 d188b24..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Gcj.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.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>
- */
-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 b99bbd2..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Javac12.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.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>
- */
-public class Javac12 extends DefaultCompilerAdapter {
-
-    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 6fab1e5..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Javac13.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.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>
- */
-public class Javac13 extends DefaultCompilerAdapter {
-
-    /**
-     * Integer returned by the "Modern" jdk1.3 compiler to indicate success.
-     */
-    private final static int MODERN_COMPILER_SUCCESS = 0;
-
-    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 49d8a5c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/JavacExternal.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.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
- */
-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 28a16d3..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Jikes.java
+++ /dev/null
@@ -1,221 +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>
- */
-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");
-        }
-
-        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 667a668..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Jvc.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.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>
- */
-public class Jvc extends DefaultCompilerAdapter {
-
-    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 8a9fb53..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java
+++ /dev/null
@@ -1,166 +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.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> + */
-public class Kjc extends DefaultCompilerAdapter {
-
-    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 fa53fde..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Sj.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.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>
- */
-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 7823753..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/And.java
+++ /dev/null
@@ -1,83 +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 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>
- * @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 541b74d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java
+++ /dev/null
@@ -1,212 +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.NoSuchElementException;
-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>
- * @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 new ConditionEnumeration();
-    }
-
-    /**
-     * 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 1.2, Ant 1.5
-     */
-    public void addIsSet(IsSet i) {conditions.addElement(i);}
-
-    /**
-     * Add an &lt;http&gt; condition.
-     *
-     * @since 1.7, Ant 1.5
-     */
-    public void addHttp(Http h) {conditions.addElement(h);}
-
-    /**
-     * Add a &lt;socket&gt; condition.
-     *
-     * @since 1.7, Ant 1.5
-     */
-    public void addSocket(Socket s) {conditions.addElement(s);}
-
-    /**
-     * Add a &lt;filesmatch&gt; condition.
-     *
-     * @since 1.8, Ant 1.5
-     */
-    public void addFilesMatch(FilesMatch test) {conditions.addElement(test);}
-    
-    /**
-     * Add a &lt;filesmatch&gt; condition.
-     *
-     * @since 1.10, Ant 1.5
-     */
-    public void addContains(Contains test) {conditions.addElement(test);}
-    
-    /**
-     * Inner class that configures those conditions with a project
-     * instance that need it.
-     *
-     * @since 1.1
-     */
-    private class ConditionEnumeration implements Enumeration {
-        private int currentElement = 0;
-
-        public boolean hasMoreElements() {
-            return countConditions() > currentElement;
-        }
-
-        public Object nextElement() throws NoSuchElementException {
-            Object o = null;
-            try {
-                o = conditions.elementAt(currentElement++);
-            } catch (ArrayIndexOutOfBoundsException e) {
-                throw new NoSuchElementException();
-            }
-            
-            if (o instanceof ProjectComponent) {
-                ((ProjectComponent) o).setProject(getProject());
-            }
-            return o;
-        }
-    }
-}
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 f4f2a32..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Contains.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.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 a44b273..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Equals.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;
-
-/**
- * Simple String comparison condition.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @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 9fa1849..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/FilesMatch.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.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);
-        }
-        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 3d71dd3..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Http.java
+++ /dev/null
@@ -1,107 +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;
-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>
- */
-public class Http extends ProjectComponent implements Condition {
-    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 task");
-        }
-        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/IsSet.java b/src/main/org/apache/tools/ant/taskdefs/condition/IsSet.java
deleted file mode 100644
index 5b14d4b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/IsSet.java
+++ /dev/null
@@ -1,79 +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;
-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>
- * @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/Not.java b/src/main/org/apache/tools/ant/taskdefs/condition/Not.java
deleted file mode 100644
index 9629ea1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Not.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.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>
- * @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 5e6666d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Or.java
+++ /dev/null
@@ -1,83 +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 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>
- * @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 1d8a8cb..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Os.java
+++ /dev/null
@@ -1,242 +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>
- * @version $Revision$
- */
-public class Os implements Condition {
-    private final static String osName =
-        System.getProperty("os.name").toLowerCase(Locale.US);
-    private final static String osArch =
-        System.getProperty("os.arch").toLowerCase(Locale.US);
-    private final static String osVersion =
-        System.getProperty("os.version").toLowerCase(Locale.US);
-    private final static 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 4f4caff..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Socket.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.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>
- */
-public class Socket extends ProjectComponent implements Condition {
-    String server = null;
-    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 task");
-        }
-        if (port == 0) {
-            throw new BuildException("No port specified in Socket task");
-        }
-        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/defaults.properties b/src/main/org/apache/tools/ant/taskdefs/defaults.properties
deleted file mode 100644
index b94cbe1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/defaults.properties
+++ /dev/null
@@ -1,150 +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
-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
-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
-
-# 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
-vssget=org.apache.tools.ant.taskdefs.optional.vss.MSVSSGET
-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
-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
-
-# 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 ed22d73..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/EmailAddress.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.email;
-
-/**
- * Holds an email address.
- *
- * @author roxspring@yahoo.com Rob Oxspring
- * @since 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;
-    }
-}
\ No newline at end of file
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 bd17326..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java
+++ /dev/null
@@ -1,523 +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 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 final static String AUTO = "auto";
-    /** Constant to allow the Mime mailer to be requested
-     */
-    public final static String MIME = "mime";
-    /** Constant to allow the UU mailer to be requested
-     */
-    public final static String UU = "uu";
-    /** Constant to allow the plaintext mailer to be requested
-     */
-    public final static 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()
-    {
-        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;
-            }
-        }
-    }
-}
-
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 0c1ead9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/Mailer.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.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 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;
-}
\ No newline at end of file
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 88d96cd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/Message.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.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 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;
-    }
-}
\ No newline at end of file
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 aca654a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of 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 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 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 );
-            }
-
-            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;
-    }
-}
\ No newline at end of file
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 1eb715e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/PlainMailer.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.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 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 1.5
- */
-class PlainMailer
-    extends Mailer
-{
-    /** Sends the email using the apache {@link org.apache.tools.mail.MailMessage MailMessage} class.
-     */
-    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( "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();
-        }
-    }
-}
\ No newline at end of file
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 ce855b7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/UUMailer.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.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 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();
-        }
-    }
-}
\ No newline at end of file
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 afa6f34..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-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.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("Forking " + commandline.toString(), 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 92a337f..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 a2592e5..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.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.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 use for the output
-     */
-    public void setDestfile(File destfile) {
-        this.destfile = destfile;
-    }
-
-
-    /**
-     *@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;
-    }
-
-
-    /**
-     *@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.
-     *  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 {
-        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 {
-            props.save(os, "Ant properties");
-        } finally {
-            os.close();
-        }
-    }
-}
-
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 eacd0f7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/IContract.java
+++ /dev/null
@@ -1,826 +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øy</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 final static String ICONTROL_PROPERTIES_HEADER =
-        " You might want to set classRoot to point to your normal compilation class root directory.";
-
-    private final static String ICONTROL_PROPERTIES_MESSAGE =
-        "You should probably modify icontrol.properties' classRoot to where comiled (uninstrumented) classes go.";
-
-    /** \ on windows, / on linux/unix */
-    private final static 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
-     */
-    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.
-     */
-    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 897c81d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/Javah.java
+++ /dev/null
@@ -1,431 +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;
-
-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 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 final static 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 (Project.getJavaVersion() != Project.JAVA_1_1 &&
-                Project.getJavaVersion() != Project.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 (ClassNotFoundException ex) {
-        //    throw new BuildException("Cannot use javah because 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 javah: ", 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 (Project.getJavaVersion().startsWith("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 args: " + cmd.toString(),
-            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 5a66891..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java
+++ /dev/null
@@ -1,267 +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;
-
-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>
- */
-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 8d0da0f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java
+++ /dev/null
@@ -1,672 +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.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;
-
-/**
- * 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>
- * </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;
-    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";
-
-    // 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;
-    }
-
-    /**
-     * 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) {
-        if (trace.equalsIgnoreCase("trace")
-            || trace.equalsIgnoreCase("trace1")
-            || trace.equalsIgnoreCase("trace2")
-            || trace.equalsIgnoreCase("notrace")) {
-            this.trace = trace;
-        } else {
-            throw new BuildException("Unknown trace value specified: '" + trace + "'");
-        }
-    }
-
-    /**
-     * 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(String verbose) {
-        this.verbose = verbose;
-    }
-
-    /**
-     * 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));
-
-            if (rc > 1) { // 1 is warnings from real NetRexxC
-                log(out.toString(), Project.MSG_ERR);
-                String msg = "Compile failed, messages should have been provided.";
-                throw new BuildException(msg);
-            }
-            else if (rc == 1) {
-                log(out.toString(), Project.MSG_WARN);
-            }
-            else {
-                log(out.toString(), Project.MSG_INFO);
-            }        
-        } 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);
-            }
-        }
-
-    }
-}
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 db05aca..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/PropertyFile.java
+++ /dev/null
@@ -1,689 +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 final static 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 final static int DEFAULT_INT_VALUE = 0;
-        private final static String DEFAULT_DATE_VALUE = "now";
-        private final static 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)  { /* swollow */ }
-            }
-            
-            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) { /* swollow */ }
-            catch (ParseException pe)  { /* swollow */ }
-            
-            if (operation == Operation.EQUALS_OPER) {
-                newValue = currentValue;
-            }
-            else {
-                int operationValue = 1;
-                try {
-                    operationValue = fmt.parse(value).intValue();
-                }
-                catch (NumberFormatException nfe) { /* swollow */ }
-                catch (ParseException pe)  { /* swollow */ }
-                
-                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 final static int INCREMENT_OPER =   0;
-            public final static int DECREMENT_OPER =   1;
-            public final static 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 final static int INTEGER_TYPE =     0;
-            public final static int DATE_TYPE =        1;
-            public final static 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 final static String MILLISECOND = "millisecond";
-        private final static String SECOND = "second";
-        private final static String MINUTE = "minute";
-        private final static String HOUR = "hour";
-        private final static String DAY = "day";
-        private final static String WEEK = "week";
-        private final static String MONTH = "month";
-        private final static String YEAR = "year";
-
-        private final static 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 6a78ecb..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/RenameExtensions.java
+++ /dev/null
@@ -1,166 +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 add8c0e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ReplaceRegExp.java
+++ /dev/null
@@ -1,439 +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).
- *
- * <pre>
- * 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.
- * </pre>
- *
- * 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 3f2210c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java
+++ /dev/null
@@ -1,235 +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.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 4b6afd0..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 107a6ca..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/StyleBook.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.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 ed6e559..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/Test.java
+++ /dev/null
@@ -1,121 +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;
- 
-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 final static 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 3ee742f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java
+++ /dev/null
@@ -1,228 +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.taskdefs.XSLTLiaison;
-import org.apache.tools.ant.taskdefs.XSLTLoggerAware;
-import org.apache.tools.ant.taskdefs.XSLTLogger;
-
-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;
-
-/**
- * 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>
- */
-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;
-
-    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);
-            StreamSource 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");
-    }
-    
-    public void warning(TransformerException e)  {
-        logError(e, "Warning");
-    }
-    
-    private void logError(TransformerException e, String type) {
-        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());
-    }
-
-} //-- 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 d68c8ec..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java
+++ /dev/null
@@ -1,578 +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;
-
-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.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 {
-
-    /**
-     * The default implementation parser classname used by the task to process
-     * validation.
-     */
-    // The crimson implementation is shipped with ant.
-    public static String DEFAULT_XML_READER_CLASSNAME= "org.apache.crimson.parser.XMLReaderImpl";
-
-    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 = DEFAULT_XML_READER_CLASSNAME;
-
-    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();
-
-    /**
-     * The list of configured DTD locations
-     */
-    public Vector dtdLocations = new Vector();
-
-    /**
-     * 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;
-    }
-
-    /**
-     * specifify a set of file to be checked
-     */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-    /**
-     * 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.
-     */
-    public DTDLocation createDTD() {
-        DTDLocation dtdLocation = new DTDLocation();
-        dtdLocations.addElement(dtdLocation);
-
-        return dtdLocation;
-    }
-
-    protected EntityResolver getEntityResolver() {
-        LocalResolver resolver = new LocalResolver();
-
-        for (Enumeration i = dtdLocations.elements(); i.hasMoreElements();) {
-            DTDLocation location = (DTDLocation)i.nextElement();
-            resolver.registerDTD(location);
-        }
-        return resolver;
-    }
-
-    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() {
-
-        try {
-            // load the parser class
-            // with JAXP, we would use a SAXParser factory
-            Class readerClass= null;
-            //Class readerImpl = null;
-            //Class parserImpl = null;
-            if (classpath != null) {
-                AntClassLoader loader = new AntClassLoader(project, classpath);
-//                loader.addSystemPackageRoot("org.xml"); // needed to avoid conflict
-                readerClass = loader.loadClass(readerClassName);
-                AntClassLoader.initializeClass(readerClass);
-            } else {
-                readerClass = Class.forName(readerClassName);
-            }
-
-            // then check it implements XMLReader
-            if (XMLReader.class.isAssignableFrom(readerClass)) {
-
-                xmlReader = (XMLReader) readerClass.newInstance();
-                log("Using SAX2 reader " + readerClassName, Project.MSG_VERBOSE);
-            } else {
-
-                // see if it is a SAX1 Parser
-                if (Parser.class.isAssignableFrom(readerClass)) {
-                    Parser parser = (Parser) readerClass.newInstance();
-                    xmlReader = new ParserAdapter(parser);
-                    log("Using SAX1 parser " + readerClassName, Project.MSG_VERBOSE);
-                }  else {
-                    throw new BuildException(INIT_FAILED_MSG
-                                             + readerClassName
-                                             + " implements nor SAX1 Parser nor SAX2 XMLReader.");
-                }
-            }
-        } 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);
-        }
-
-        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();
-        }
-    }
-
-    public static class DTDLocation {
-        private String publicId = null;
-        private String location = null;
-
-        public void setPublicId(String publicId) {
-            this.publicId = publicId;
-        }
-
-        public void setLocation(String location) {
-            this.location = location;
-        }
-
-        public String getPublicId() {
-            return publicId;
-        }
-
-        public String getLocation() {
-            return location;
-        }
-    }
-
-    private class LocalResolver
-        implements EntityResolver
-    {
-        private Hashtable fileDTDs = new Hashtable();
-        private Hashtable resourceDTDs = new Hashtable();
-        private Hashtable urlDTDs = new Hashtable();
-
-        public LocalResolver() {}
-
-        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);
-                    log("Mapped publicId " + publicId + " to file " + fileDTD, Project.MSG_VERBOSE);
-                }
-                return;
-            }
-
-            if (LocalResolver.this.getClass().getResource(location) != null) {
-                if (publicId != null) {
-                    resourceDTDs.put(publicId, location);
-                    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
-        {
-            File dtdFile = (File) fileDTDs.get(publicId);
-            if (dtdFile != null) {
-                try {
-                    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) {
-                    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();
-                    log("Resolved " + publicId + " to url " + dtdUrl, Project.MSG_VERBOSE);
-                    return new InputSource(is);
-                } catch ( IOException ioe) {
-                    //ignore
-                }
-            }
-
-            log("Could not resolve ( publicId: " + publicId + ", systemId: " + systemId + ") to a local entity",
-                Project.MSG_INFO);
-
-            return null;
-        }
-
-        public void registerDTD(DTDLocation location) {
-            registerDTD(location.getPublicId(), location.getLocation());
-        }
-    }
-}
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 4592e60..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/XalanLiaison.java
+++ /dev/null
@@ -1,137 +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;
-
-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>
- */
-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 f5d9021..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/XslpLiaison.java
+++ /dev/null
@@ -1,113 +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;
-
-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>
- */
-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 1b9c02e..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 final static String FLAG_COMMENT = "/comment";
-
-    /**
-     *  -task flag -- associate checckout task with task
-     */
-    public final static 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 a4e17d7..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 final static 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 ee94c47..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCreateTask.java
+++ /dev/null
@@ -1,362 +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.toString(), 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 final static String FLAG_COMMENT = "/synopsis";
-
-    /**
-     *  /platform flag -- target platform
-     */
-    public final static String FLAG_PLATFORM = "/plat";
-
-    /**
-     * /resolver flag
-     */
-    public final static String FLAG_RESOLVER = "/resolver";
-
-    /**
-     * /release flag
-     */
-    public final static String FLAG_RELEASE = "/release";
-
-    /**
-     * /release flag
-     */
-    public final static String FLAG_SUBSYSTEM = "/subsystem";
-
-    /**
-     *  -task flag -- associate checckout task with task
-     */
-    public final static 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());
-        } // end of catch
-        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 5740a3c..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 final static String FLAG_RECURSE = "/recurse";
-
-    /**
-     * /recurse --
-     */
-    public final static String FLAG_VERBOSE = "/verbose";
-
-
-    /**
-     *  /project flag -- target project
-     */
-    public final static 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 bcc60c9..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 final static String CCM_EXE = "ccm";
-
-    /**
-     * The 'CreateTask' command
-     */
-    public final static String COMMAND_CREATE_TASK = "create_task";
-    /**
-     * The 'Checkout' command
-     */
-    public final static String COMMAND_CHECKOUT = "co";
-    /**
-     * The 'Checkin' command
-     */
-    public final static String COMMAND_CHECKIN = "ci";
-    /**
-     * The 'Reconfigure' command
-     */
-    public final static String COMMAND_RECONFIGURE = "reconfigure";
-
-    /**
-     * The 'Reconfigure' command
-     */
-    public final static 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 788295c..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 final static String FLAG_COMMENT = "-c";
-        /**
-     * -cfile flag -- file containing a comment to attach to the file
-     */
-    public final static String FLAG_COMMENTFILE = "-cfile";
-        /**
-     * -nc flag -- no comment is specified
-     */
-    public final static String FLAG_NOCOMMENT = "-nc";
-        /**
-     * -nwarn flag -- suppresses warning messages
-     */
-    public final static String FLAG_NOWARN = "-nwarn";
-        /**
-     * -ptime flag -- preserves the modification time
-     */
-    public final static String FLAG_PRESERVETIME = "-ptime";
-        /**
-     * -keep flag -- keeps a copy of the file with a .keep extension
-     */
-    public final static String FLAG_KEEPCOPY = "-keep";
-        /**
-     * -identical flag -- allows the file to be checked in even if it is identical to the original
-     */
-    public final static 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 b427c8f..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 final static String FLAG_RESERVED = "-reserved";
-        /**
-     *  -reserved flag -- check out the file as unreserved
-     */
-    public final static String FLAG_UNRESERVED = "-unreserved";
-        /**
-     * -out flag -- create a writable file under a different filename
-     */
-    public final static String FLAG_OUT = "-out";
-        /**
-     * -ndata flag -- checks out the file but does not create an editable file containing its data
-     */
-    public final static String FLAG_NODATA = "-ndata";
-        /**
-     * -branch flag -- checks out the file on a specified branch
-     */
-    public final static String FLAG_BRANCH = "-branch";
-        /**
-     * -version flag -- allows checkout of a version that is not main latest
-     */
-    public final static String FLAG_VERSION = "-version";
-        /**
-     * -nwarn flag -- suppresses warning messages
-     */
-    public final static String FLAG_NOWARN = "-nwarn";
-        /**
-     * -c flag -- comment to attach to the file
-     */
-    public final static String FLAG_COMMENT = "-c";
-        /**
-     * -cfile flag -- file containing a comment to attach to the file
-     */
-    public final static String FLAG_COMMENTFILE = "-cfile";
-        /**
-     * -nc flag -- no comment is specified
-     */
-    public final static 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 a1c2d46..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 final static String FLAG_KEEPCOPY = "-keep";
-        /**
-     *  -rm flag -- remove the copy of the file
-     */
-    public final static 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 5508b64..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 final static String FLAG_GRAPHICAL = "-graphical";
-        /**
-     * -log flag -- file to log status to
-     */
-    public final static String FLAG_LOG = "-log";
-        /**
-     * -overwrite flag -- overwrite hijacked files
-     */
-    public final static String FLAG_OVERWRITE = "-overwrite";
-        /**
-     * -noverwrite flag -- do not overwrite hijacked files
-     */
-    public final static String FLAG_NOVERWRITE = "-noverwrite";
-        /**
-     * -rename flag -- rename hijacked files with .keep extension
-     */
-    public final static String FLAG_RENAME = "-rename";
-        /**
-     * -ctime flag -- modified time is written as the current time
-     */
-    public final static String FLAG_CURRENTTIME = "-ctime";
-        /**
-     * -ptime flag -- modified time is written as the VOB time
-     */
-    public final static 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 a9ee630..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/ClearCase.java
+++ /dev/null
@@ -1,165 +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.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 final static String CLEARTOOL_EXE = "cleartool";
-
-    /**
-     * The 'Update' command
-     */
-    public final static String COMMAND_UPDATE = "update";
-    /**
-     * The 'Checkout' command
-     */
-    public final static String COMMAND_CHECKOUT = "checkout";
-    /**
-     * The 'Checkin' command
-     */
-    public final static String COMMAND_CHECKIN = "checkin";
-    /**
-     * The 'UndoCheckout' command
-     */
-    public final static String COMMAND_UNCHECKOUT = "uncheckout";
-
-}
-
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 81d1102..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 final static 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 6d443a7..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- */
-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 f1c5de9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/Depend.java
+++ /dev/null
@@ -1,716 +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.FileInputStream;
-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;
-
-/**
- * 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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
-     */
-    private static class ClassFileInfo {
-        /** The file where the class file is stored in the file system */
-        public File absoluteFile;
-
-        /**
-         * The location of the file relative to its base directory - the
-         * root of the package namespace
-         */
-        public String relativeName;
-
-        /** The Java class name of this class */
-        public String className;
-    }
-
-    /** 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;
-
-    /**
-     * A map which gives for every class a list of te 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 final static String CACHE_FILE_NAME = "dependencies.txt";
-    /** String Used to separate classnames in the dependency file */
-    private final static 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() throws IOException {
-        Hashtable dependencyMap = new Hashtable();
-
-        if (cache != null) {
-            File depFile = new File(cache, CACHE_FILE_NAME);
-            BufferedReader in = null;
-            if (depFile.exists()) {
-                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();
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Determine the dependencies between classes. Class dependencies are
-     * determined by examining the class references in a class file to other
-     * classes
-     *
-     * @exception IOException if either the dependnecies 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 depCacheFile = null;
-        boolean depCacheFileExists = true;
-        long depCacheFileLastModified = Long.MAX_VALUE;
-
-        // read the dependency cache from the disk
-        if (cache != null) {
-            dependencyMap = readCachedDependencies();
-            depCacheFile = new File(cache, CACHE_FILE_NAME);
-            depCacheFileExists = depCacheFile.exists();
-            depCacheFileLastModified = depCacheFile.lastModified();
-        }
-        for (Enumeration e = getClassFiles(destPath).elements(); e.hasMoreElements(); ) {
-            ClassFileInfo info = (ClassFileInfo)e.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 (depCacheFileExists && depCacheFileLastModified > 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
-                FileInputStream inFileStream = null;
-                try {
-                    inFileStream = new FileInputStream(info.absoluteFile);
-                    ClassFile classFile = new ClassFile();
-                    classFile.read(inFileStream);
-
-                    dependencyList = classFile.getClassRefs();
-                    if (dependencyList != null) {
-                        cacheDirty = true;
-                        dependencyMap.put(info.className, dependencyList);
-                    }
-                } finally {
-                    if (inFileStream != null) {
-                        inFileStream.close();
-                    }
-                }
-            }
-
-            // This class depends on each class in the dependency list. For each
-            // one of those, add this class into their affected classes list
-            for (Enumeration depEnum = dependencyList.elements(); 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;
-        if (dependClasspath != null) {
-            // now determine which jars each class depends upon
-            classpathDependencies = new Hashtable();
-            AntClassLoader loader = new AntClassLoader(getProject(), dependClasspath);
-
-            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);
-                for (Enumeration e2 = dependencyList.elements(); 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) {
-            for (Enumeration e = affectedClasses.keys(); e.hasMoreElements(); ) {
-                String affectedClassName = (String)e.nextElement();
-                ClassFileInfo affectedClassInfo = (ClassFileInfo)affectedClasses.get(affectedClassName);
-                if (affectedClassInfo.absoluteFile.exists()) {
-                    log("Deleting file " + affectedClassInfo.absoluteFile.getPath() + " since " +
-                        className + " out of date", Project.MSG_VERBOSE);
-                    affectedClassInfo.absoluteFile.delete();
-                    count++;
-                    if (closure) {
-                        count += deleteAffectedFiles(affectedClassName);
-                    } else {
-                        // without closure we may delete an inner class but not the
-                        // top level class which would not trigger a recompile.
-
-                        if (affectedClassName.indexOf("$") != -1) {
-                            // need to delete the main class
-                            String topLevelClassName
-                                 = affectedClassName.substring(0, affectedClassName.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;
-    }
-
-    /**
-     * Does the work.
-     *
-     * @exception BuildException Thrown in case of an unrecoverable error.
-     */
-    public void execute() throws BuildException {
-        try {
-            long start = System.currentTimeMillis();
-            String[] srcPathList = srcPath.list();
-            if (srcPathList.length == 0) {
-                throw new BuildException("srcdir attribute must be set!", 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) {
-                log("Reverse Dependency Dump for " + affectedClassMap.size() +
-                    " classes:", Project.MSG_DEBUG);
-                for (Enumeration e = affectedClassMap.keys(); e.hasMoreElements(); ) {
-                    String className = (String)e.nextElement();
-                    log(" Class " + className + " affects:", Project.MSG_DEBUG);
-                    Hashtable affectedClasses = (Hashtable)affectedClassMap.get(className);
-                    for (Enumeration e2 = affectedClasses.keys(); e2.hasMoreElements(); ) {
-                        String affectedClass = (String)e2.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);
-                    for (Enumeration e = classpathDependencies.keys(); e.hasMoreElements(); ) {
-                        String className = (String)e.nextElement();
-                        log(" Class " + className + " depends on:", Project.MSG_DEBUG);
-                        Hashtable dependencies = (Hashtable)classpathDependencies.get(className);
-                        for (Enumeration e2 = dependencies.elements(); e2.hasMoreElements(); ) {
-                            File classpathFile = (File)e2.nextElement();
-                            log("    " + classpathFile.getPath(), Project.MSG_DEBUG);
-                        }
-                    }
-                }
-            }
-
-            // we now need to scan for out of date files. When we have the list
-            // we go through and delete all class files which are affected by these files.
-            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) {
-                for (Enumeration e = classpathDependencies.keys(); e.hasMoreElements(); ) {
-                    String className = (String)e.nextElement();
-                    if (!outOfDateClasses.containsKey(className)) {
-                        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;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
-            // we now have a complete list of classes which are out of date
-            // We scan through the affected classes, deleting any affected classes.
-            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;
-    }
-
-    /**
-     * 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) {
-            int length = filesInDir.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;
-                    info.relativeName = file.getPath().substring(root.getPath().length() + 1,
-                        file.getPath().length() - 6);
-                    info.className = ClassFileUtils.convertSlashName(info.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
-     * dependenecies 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 48764fa..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 29233c2..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 641daaf..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPool.java
+++ /dev/null
@@ -1,390 +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 e2a455d..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 final static int CONSTANT_UTF8 = 1;
-
-    /** Tag value for Integer entries. */
-    public final static int CONSTANT_INTEGER = 3;
-
-    /** Tag value for Float entries. */
-    public final static int CONSTANT_FLOAT = 4;
-
-    /** Tag value for Long entries. */
-    public final static int CONSTANT_LONG = 5;
-
-    /** Tag value for Double entries. */
-    public final static int CONSTANT_DOUBLE = 6;
-
-    /** Tag value for Class entries. */
-    public final static int CONSTANT_CLASS = 7;
-
-    /** Tag value for String entries. */
-    public final static int CONSTANT_STRING = 8;
-
-    /** Tag value for Field Reference entries. */
-    public final static int CONSTANT_FIELDREF = 9;
-
-    /** Tag value for Method Reference entries. */
-    public final static int CONSTANT_METHODREF = 10;
-
-    /** Tag value for Interface Method Reference entries. */
-    public final static int CONSTANT_INTERFACEMETHODREF = 11;
-
-    /** Tag value for Name and Type entries. */
-    public final static 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 a34e8c7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/FieldRefCPInfo.java
+++ /dev/null
@@ -1,166 +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 1c57a31..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 fd524b0..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 0ebceb5..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 88fbcc0..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 6421569..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/CSharp.java
+++ /dev/null
@@ -1,890 +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
-        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.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>
- @version 0.3
- @author Steve Loughran steve_l@iseran.com
-
- * @ant.task name="csc" category="dotnet"
- */
-
-public class CSharp
-        extends MatchingTask {
-
-    /** constructor inits everything and set up the search pattern
-     */
-
-    public CSharp() {
-        Clear();
-        setIncludes(csc_file_pattern);
-    }
-
-    /** 
-     * Name of the executable. The .exe suffix is deliberately not 
-     * included in anticipation of the unix version
-     */
-    protected final static String csc_exe_name = "csc";
-
-    /** what is the file extension we search on?
-     */
-    protected final static String csc_file_ext = "cs";
-
-    /** derive the search pattern from the extension
-     */
-    protected final static String csc_file_pattern = "**/*." + csc_file_ext;
-
-    /** list of reference classes. (pretty much a classpath equivalent)
-     */
-    protected String _references;
-
-    /**
-     *  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;
-        }
-    }
-
-    /**
-     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
-     */
-    protected Path _referenceFiles;
-
-    /**
-     * 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);
-    }
-
-    /**
-     * 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.
-     */
-
-    protected final static 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;" +
-            "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;";
-
-
-    /**
-     * 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;
-        }
-    }
-
-    /** flag to enable automatic reference inclusion
-     *
-     */
-    protected boolean _includeDefaultReferences;
-
-    /** 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 the optimise flag
-     @return true if optimise 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?"-":"+");
-    }
-
-    /** optimise flag
-     */
-    protected boolean _optimize;
-
-    /** 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?"+":"-");
-    }
-
-    /** incremental build flag */
-    protected boolean _incremental;
-
-    /** 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?"+":"-");
-    }
-
-    /** debug flag. Controls generation of debug information.
-     */
-    protected boolean _debug;
-
-    /** 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?"+":"-");
-    }
-
-    /** output XML documentation flag
-     */
-    protected File _docFile;
-
-    /** 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;
-        }
-    }
-
-    /** warning level: 0-4, with 4 being most verbose
-     */
-    private int _warnLevel;
-
-    /** 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;
-    }
-
-    /** enable unsafe code flag. Clearly set to false by default
-     */
-    protected boolean _unsafe;
-
-    /**
-     *  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;
-    }
-
-    /** main class (or null for automatic choice)
-     */
-    protected String _mainClass;
-
-    /**
-     *  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;
-        }
-    }
-
-    /** any extra command options?
-     */
-    protected String _extraOptions;
-
-    /**
-     *  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;
-        }
-    }
-
-    /** source directory upon which the search pattern is applied
-     */
-    private File _srcDir;
-
-    /**
-     * Set the source dir to find the files to be compiled
-     * @param  srcDirName  The new SrcDir value
-     */
-    public void setSrcDir(File srcDirName) {
-        _srcDir = srcDirName;
-    }
-
-    /** destination directory (null means use the source directory)
-     * NB: this is currently not used
-     */
-    private File _destDir;
-
-    /**
-     * Set the destination dir to find the files to be compiled
-     * @param  dirName  The new DestDir value
-     */
-    public void setDestDir(File dirName) {
-        _destDir = dirName;
-    }
-
-    /** 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;
-
-    /** 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 targetType)
-            throws BuildException {
-        targetType = targetType.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;
-        }
-    }
-
-    /** icon for incorporation into apps
-     */
-    protected File _win32icon;
-
-    /**
-     * 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;
-        }
-    }
-
-    /** icon for incorporation into apps
-     */
-    protected File _win32res;
-
-    /**
-     * Set the win32 icon
-     * @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 Win32Icon Parameter to CSC
-     */
-    protected String getWin32ResParameter() {
-        if (_win32res != null) {
-            return "/win32res:" + _win32res.toString();
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * utf out flag
-     */
-
-    protected boolean _utf8output = false;
-
-    /**
-     * enable generation of utf8 output from the compiler.
-     */
-    public void setUtf8Output(boolean enabled) {
-        _utf8output = enabled;
-    }
-
-    protected String getUtf8OutpuParameter() {
-        return _utf8output?"/utf8output":null;
-    }
-
-    protected boolean _noconfig = false;
-
-    protected void setNoConfig(boolean enabled) {
-        _noconfig = enabled;
-    }
-
-    protected String getNoConfigParameter() {
-        return _noconfig?"/noconfig":null;
-    }
-
-    // /fullpaths
-    protected boolean _fullpaths = false;
-
-    public void setFullPaths(boolean enabled) {
-        _fullpaths = enabled;
-    }
-
-    protected String getFullPathsParameter() {
-        return _fullpaths?"/fullpaths":null;
-    }
-
-    /** defines list
-     * something like 'RELEASE;WIN32;NO_SANITY_CHECKS;;SOMETHING_ELSE'
-     */
-    String _definitions;
-
-    /**
-     * Set the definitions
-     * @param list of definitions split by ; or , or even :
-     */
-    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;
-        }
-    }
-
-    /** list of extra modules to refer to
-     *
-     */
-    String _additionalModules;
-
-    /**
-     * Set the definitions
-     * @param list of definitions split by ; or , or even :
-     */
-    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;
-        }
-    }
-
-    /** output file. If not supplied this is derived from the
-     *  source file
-     */
-    protected File _outputFile;
-
-    /**
-     * Set the definitions
-     * @param list of definitions split by ; or , or even :
-     */
-    public void setOutputFile(File params) {
-        _outputFile = params;
-    }
-
-    /** 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;
-        }
-    }
-
-    /** flag to control action on execution trouble
-     */
-    protected boolean _failOnError;
-
-    /**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;
-    }
-
-    /** 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;
-    }
-
-    /**
-     *  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;
-    }
-
-    /** do the work by building the command line and then calling it
-     */
-    public void execute()
-            throws BuildException {
-        if (_srcDir == null) {
-            _srcDir = project.resolveFile(".");
-        }
-
-        NetCommand command = new NetCommand(this, "CSC", csc_exe_name);
-        command.setFailOnError(getFailFailOnError());
-        //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(getUtf8OutpuParameter());
-        command.addArgument(getNoConfigParameter());
-        command.addArgument(getFullPathsParameter());
-        command.addArgument(getExtraOptionsParameter());
-
-        //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();
-        //add to the command
-        for (int i = 0; i < dependencies.length; i++) {
-            String targetFile = dependencies[i];
-            targetFile = baseDir + File.separator + targetFile;
-            command.addArgument(targetFile);
-        }
-
-        //now run the command of exe + settings + files
-        command.runCommand();
-    } // end execute
-
-} //end class
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 fa48afd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/Ilasm.java
+++ /dev/null
@@ -1,475 +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
-       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.2
- */
-
-
-public class Ilasm
-        extends MatchingTask {
-
-    /** constructor inits everything and set up the search pattern
-     */
-    public Ilasm() {
-        Clear();
-        setIncludes(file_pattern);
-    }
-
-    /** 
-     * Name of the executable. The .exe suffix is deliberately not included
-     * in anticipation of the unix version
-     */
-    protected final static String exe_name = "ilasm";
-
-    /** what is the file extension we search on?
-     */
-    protected final static String file_ext = "il";
-
-    /** and now derive the search pattern from the extension
-     */
-    protected final static String file_pattern = "**/*." + file_ext;
-
-    /** title of task for external presentation
-     */
-    protected final static String exe_title = "ilasm";
-
-    /** reset all contents.
-     */
-    public void Clear() {
-        _targetType = null;
-        _srcDir = null;
-        _listing = false;
-        _verbose = false;
-        _debug = true;
-        _outputFile = null;
-        _failOnError = true;
-        _resourceFile = null;
-        _extraOptions = null;
-    }
-
-    /** source directory upon which the search pattern is applied
-     */
-    private File _srcDir;
-
-    /**
-     * Set the source dir to find the files to be compiled
-     * @param  srcDirName  The new SrcDir value
-     */
-    public void setSrcDir(File srcDirName) {
-        _srcDir = srcDirName;
-    }
-
-
-    /** 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;
-
-    /** 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 {
-        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 string to test
-     * @return true if the argument is not null or empty
-     */
-    protected boolean notEmpty(String s) {
-        return s != null && s.length() != 0;
-    }
-
-    /** verbose flag
-     */
-    protected boolean _verbose;
-
-    /**
-     * 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";
-    }
-
-
-    /** listing flag
-     */
-
-    protected boolean _listing;
-
-    /**
-     * 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";
-    }
-
-
-    /**
-     * output file. If not supplied this is derived from the
-     *  source file
-     */
-    protected File _outputFile;
-
-    /**
-     * Set the definitions
-     * @param list of definitions split by ; or , or even :
-     */
-    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();
-    }
-
-    /** resource file (.res format) to include in the app.
-     */
-    protected File _resourceFile;
-
-    /**
-     * Set the resource file
-     * @param fileName path to the file. Can be relative, absolute, whatever.
-     */
-    public void setResourceFile(File fileName) {
-        _resourceFile = fileName;
-    }
-
-    protected String getResourceFileParameter() {
-        if (_resourceFile != null) {
-            return "/resource=" + _resourceFile.toString();
-        } else {
-            return null;
-        }
-    }
-
-    /** flag to control action on execution trouble
-     */
-    protected boolean _failOnError;
-
-    /**set fail on error flag
-     */
-    public void setFailOnError(boolean b) {
-        _failOnError = b;
-    }
-
-    /** query fail on error flag
-     */
-    public boolean getFailFailOnError() {
-        return _failOnError;
-    }
-
-    /** debug flag. Controls generation of debug information.
-     */
-    protected boolean _debug;
-
-    /** 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
-     */
-    protected String getDebugParameter() {
-        return _debug?"/debug":null;
-    }
-
-    /** file containing private key
-     */
-
-    private File _keyfile;
-
-    public void setKeyfile(File keyfile) {
-        this._keyfile = keyfile;
-    }
-
-    /** get the argument or null for no argument needed
-     */
-    protected String getKeyfileParameter() {
-        if (_keyfile != null) {
-            return "/keyfile:" + _keyfile.toString();
-        } else {
-            return null;
-        }
-    }
-
-    /** any extra command options?
-     */
-    protected String _extraOptions;
-
-    /**
-     *  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
-} //class
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 b0b591c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NetCommand.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/>.
- */
-
-/* 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.3
- */
-
-public class NetCommand {
-
-    /** constructor
-     @param owning task
-     @param title (for logging/errors)
-     @param executable. Leave off the '.exe. for future portability
-     */
-
-    public NetCommand(Task owner, String title, String program) {
-        _owner = owner;
-        _title = title;
-        _program = program;
-        _commandLine = new Commandline();
-        _commandLine.setExecutable(_program);
-        prepareExecutor();
-    }
-
-    /** owner project
-     */
-    protected Task _owner;
-
-    /** executabe
-     */
-    protected Execute _exe;
-
-    /** 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;
-
-    /**
-     * turn tracing on or off
-     * @param b trace flag
-     */
-    public void setTraceCommandLine(boolean b) {
-        _traceCommandLine = b;
-    }
-
-    /** flag to control action on execution trouble
-     */
-    protected boolean _failOnError;
-
-    /**
-     * 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
-     */
-    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);
-        }
-    }
-
-    /**
-     * set up the command sequence..
-     */
-    protected void prepareExecutor() {
-        // default directory to the project's base directory
-        File dir = _owner.getProject().getBaseDir();
-        ExecuteStreamHandler handler = new LogStreamHandler(_owner,
-                Project.MSG_INFO, Project.MSG_WARN);
-        _exe = new Execute(handler, null);
-        _exe.setAntRun(_owner.getProject());
-        _exe.setWorkingDirectory(dir);
-    }
-
-    /**
-     * Run the command using the given Execute instance.
-     * @throws an exception of 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.toString());
-            } else {
-                //in verbose mode we always log stuff
-                logVerbose(_commandLine.toString());
-            }
-            _exe.setCommandline(_commandLine.getCommandline());
-            err = _exe.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());
-        }
-    }
-} //class
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 9b43a09..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java
+++ /dev/null
@@ -1,474 +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.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 final static String PUBLICID_BORLAND_EJB
-    = "-//Inprise Corporation//DTD Enterprise JavaBeans 1.1//EN";
-
-    protected final static String DEFAULT_BAS45_EJB11_DTD_LOCATION 
-    = "/com/inprise/j2ee/xml/dtds/ejb-jar.dtd";
-    
-    protected final static String DEFAULT_BAS_DTD_LOCATION 
-    = "/com/inprise/j2ee/xml/dtds/ejb-inprise.dtd";       
-    
-    protected final static String BAS_DD = "ejb-inprise.xml";    
-
-    /** Java2iiop executable **/
-    protected final static String JAVA2IIOP = "java2iiop";
-
-    /** Verify class */
-    protected final static 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 {
-            String args = verifyArgs;            
-            args += " "+sourceJar.getPath();
-            
-            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.toString(),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);
-        }
-    }
-
-    /**
-     * @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("[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 20c6165..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.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.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
-{
-    final static String JAVA_MODE = "java";
-    final static 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();
-        } // end of if ()
-        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 208a80e..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 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:  
- *       "This product includes software developed by the 
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written 
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 <a href="mailto:conor@cortexebusiness.com.au">Conor MacNeill</a>, 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 63839e4..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreatorHelper.java
+++ /dev/null
@@ -1,181 +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 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 <a href="mailto:conor@cortexebusiness.com.au">Conor MacNeill</a>, 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 818ab0a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DescriptorHandler.java
+++ /dev/null
@@ -1,387 +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 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 final static int STATE_LOOKING_EJBJAR = 1;
-    private final static int STATE_IN_EJBJAR = 2;
-    private final static int STATE_IN_BEANS = 3;
-    private final static int STATE_IN_SESSION = 4;
-    private final static int STATE_IN_ENTITY = 5;
-    private final static 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 final static String EJB_REF               = "ejb-ref";
-    private final static String HOME_INTERFACE        = "home";
-    private final static String REMOTE_INTERFACE      = "remote";
-    private final static String LOCAL_HOME_INTERFACE  = "local-home";
-    private final static String LOCAL_INTERFACE       = "local";
-    private final static String BEAN_CLASS            = "ejb-class";
-    private final static String PK_CLASS              = "prim-key-class";
-    private final static String EJB_NAME              = "ejb-name";
-    private final static String EJB_JAR               = "ejb-jar";
-    private final static String ENTERPRISE_BEANS      = "enterprise-beans";
-    private final static String ENTITY_BEAN           = "entity";
-    private final static String SESSION_BEAN          = "session";
-    private final static 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 aa05ae3..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbJar.java
+++ /dev/null
@@ -1,641 +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 <a href="mailto:conor@cortexebusiness.com.au">Conor MacNeill</a>
- */
-public class EjbJar extends MatchingTask {
-
-    /**
-     * Inner class used to record information about the location of a local DTD
-     */
-    public static class DTDLocation {
-        /** The public ID of the DTD */
-        private String publicId = null;
-        /** The DTD's local location */
-        private String location = null;
-
-        
-        /**
-         * Sets the publicId of the DTDLocation
-         *
-         * @param publicId the new publicId value
-         */
-        public void setPublicId(String publicId) {
-            this.publicId = publicId;
-        }
-
-        /**
-         * Sets the location of the DTDLocation. This value may be file path or
-         * a local resource on the classpath
-         *
-         * @param location the new location value
-         */
-        public void setLocation(String location) {
-            this.location = location;
-        }
-
-        /**
-         * Gets the publicId of the DTDLocation
-         *
-         * @return the publicId value
-         */
-        public String getPublicId() {
-            return publicId;
-        }
-
-        /**
-         * Gets the location of the DTDLocation
-         *
-         * @return the location value
-         */
-        public String getLocation() {
-            return location;
-        }
-    }
-
-    /**
-     * 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;
-    }
-
-    /**
-     * 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 final static 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 final static String DIRECTORY = "directory";
-        
-        /** 
-         * Naming scheme where the generated jar name is based on the name of
-         * the deployment descriptor file
-         */
-        public final static String DESCRIPTOR = "descriptor";
-        
-        /** 
-         * Naming scheme where the generated jar is named by the basejarname 
-         * attribute 
-         */
-        public final static 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() {
-        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 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() {
-        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 ae2554c..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 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:  
- *       "This product includes software developed by the 
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written 
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 <a href="mailto:conor@cortexebusiness.com.au">Conor MacNeill</a>, 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 manfestFilename 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 73f01f8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbcHelper.java
+++ /dev/null
@@ -1,295 +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 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 <a href="mailto:conor@cortexebusiness.com.au">Conor MacNeill</a>, 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 8f9578a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java
+++ /dev/null
@@ -1,864 +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.Set;
-import java.util.TreeSet;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.jar.JarOutputStream;
-import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
-
-
-import javax.xml.parsers.SAXParser;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-
-
-import org.apache.tools.ant.util.depend.Dependencies;
-import org.apache.tools.ant.util.depend.Filter;
-import org.apache.bcel.classfile.JavaClass;
-import org.apache.bcel.classfile.ClassParser;
-
-
-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;
-
-
-/**
- * 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.
- */
-public class GenericDeploymentTool implements EJBDeploymentTool {
-    /** Private constants that are used when constructing the standard jarfile */
-    protected final static String META_DIR  = "META-INF/";
-    protected final static String EJB_DD    = "ejb-jar.xml";
-
-    /**
-     * 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;
-
-    /**
-     * 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 desitination directory.
-     */
-    protected File getDestDir() {
-        return destDir;
-    }
-
-
-    /**
-     * Set the task which owns this tool
-     */
-    public void setTask(Task task) {
-        this.task = task;
-    }
-
-    /**
-     * Get the task for this tool.
-     */
-    protected Task getTask() {
-        return task;
-    }
-
-    /**
-     * Get the basename terminator.
-     */
-    protected EjbJar.Config getConfig() {
-        return config;
-    }
-
-    /**
-     * Returns true, if the meta-inf dir is being explicitly set, false otherwise.
-     */
-    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
-     */
-    public Path createClasspath() {
-        if (classpath == null) {
-            classpath = new Path(task.getProject());
-        }
-        return classpath.createPath();
-    }
-
-    /**
-     * Set the classpath to be used for this compilation.
-     */
-    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.
-     */
-    protected Path getCombinedClasspath() {
-        Path combinedPath = classpath;
-        if (config.classpath != null) {
-            if (combinedPath == null) {
-                combinedPath = config.classpath;
-            }
-            else {
-                combinedPath.append(config.classpath);
-            }
-        }
-
-        return combinedPath;
-    }
-
-    protected void log(String message, int level) {
-        getTask().log(message, level);
-    }
-
-    protected Location getLocation() {
-        return getTask().getLocation();
-    }
-
-
-    /**
-     * Configure this tool for use in the ejbjar task.
-     */
-    public void configure(EjbJar.Config config) {
-        this.config = config;
-
-        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);
-            }
-            baseName = descriptorFileName.substring(0, endBaseName);
-        } else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.DIRECTORY)) {
-            int lastSeparatorIndex = descriptorFileName.lastIndexOf(File.separator);
-            String dirName = descriptorFileName.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
-    {
-        Dependencies visitor = new Dependencies();
-        Set set = new TreeSet();
-        Set newSet = new HashSet();
-        final String base = config.srcDir.getAbsolutePath() + File.separator;
-
-        Iterator i = checkEntries.keySet().iterator();
-        while (i.hasNext()) {
-            String entryName = (String)i.next();
-            if (entryName.endsWith(".class")) {
-                newSet.add(entryName.substring(0, entryName.length() - ".class".length()).replace(File.separatorChar, '/'));
-            }
-        }
-        set.addAll(newSet);
-
-        do {
-            i = newSet.iterator();
-            while (i.hasNext()) {
-                String fileName = base + ((String)i.next()).replace('/', File.separatorChar) + ".class";
-
-                try {
-                    JavaClass javaClass = new ClassParser(fileName).parse();
-                    javaClass.accept(visitor);
-                }
-                catch (IOException e) {
-                    log("exception: " +  e.getMessage(), Project.MSG_INFO);
-                }
-            }
-            newSet.clear();
-            newSet.addAll(visitor.getDependencies());
-            visitor.clearDependencies();
-
-            Dependencies.applyFilter(newSet, new Filter() {
-                    public boolean accept(Object object) {
-                        String fileName = base + ((String)object).replace('/', File.separatorChar) + ".class";
-                        return new File(fileName).exists();
-                    }
-                });
-            newSet.removeAll(set);
-            set.addAll(newSet);
-        }
-        while (newSet.size() > 0);
-
-        i = set.iterator();
-        while (i.hasNext()) {
-            String next = ((String)i.next()).replace('/', File.separatorChar);
-            checkEntries.put(next + ".class", new File(base + next + ".class"));
-            log("dependent class: " + next + ".class" + " - " + base + next + ".class", 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 984a240..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 final static 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 edd97dc..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbc.java
+++ /dev/null
@@ -1,1527 +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 final static String ENTITY_BEAN       = "entity";
-    private final static String STATELESS_SESSION = "stateless";
-    private final static 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 0652721..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbcTask.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.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 0b2babc..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 5dc8a04..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 final static String JBOSS_DD = "jboss.xml";
-    protected final static 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 30da2f4..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JonasDeploymentTool.java
+++ /dev/null
@@ -1,599 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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() + ". Or 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]);
-       }
-     }      
-   }
-   
-}
-// eof.
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 0fbce81..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLRun.java
+++ /dev/null
@@ -1,431 +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 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 <a href="mailto:conor@cortexebusiness.com.au">Conor MacNeill</a>, Cortex ebusiness Pty Limited
- */
-public class WLRun extends Task {
-    protected final static String DEFAULT_WL51_POLICY_FILE = "weblogic.policy";
-    protected final static String DEFAULT_WL60_POLICY_FILE = "lib/weblogic.policy";
-    protected final static 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 ba1e4b9..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 <a href="mailto:conor@cortexebusiness.com.au">Conor MacNeill</a>, 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 3da160b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicDeploymentTool.java
+++ /dev/null
@@ -1,771 +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 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 final static String PUBLICID_EJB11
-        = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN";
-    public final static String PUBLICID_EJB20
-        = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN";
-    public final static String PUBLICID_WEBLOGIC_EJB510
-        = "-//BEA Systems, Inc.//DTD WebLogic 5.1.0 EJB//EN";
-    public final static String PUBLICID_WEBLOGIC_EJB600
-        = "-//BEA Systems, Inc.//DTD WebLogic 6.0.0 EJB//EN";
-
-    protected final static String DEFAULT_WL51_EJB11_DTD_LOCATION
-        = "/weblogic/ejb/deployment/xml/ejb-jar.dtd";
-    protected final static String DEFAULT_WL60_EJB11_DTD_LOCATION
-        = "/weblogic/ejb20/dd/xml/ejb11-jar.dtd";
-    protected final static String DEFAULT_WL60_EJB20_DTD_LOCATION
-        = "/weblogic/ejb20/dd/xml/ejb20-jar.dtd";
-
-    protected final static String DEFAULT_WL51_DTD_LOCATION
-        = "/weblogic/ejb/deployment/xml/weblogic-ejb-jar.dtd";
-    protected final static String DEFAULT_WL60_51_DTD_LOCATION
-        = "/weblogic/ejb20/dd/xml/weblogic510-ejb-jar.dtd";
-    protected final static String DEFAULT_WL60_DTD_LOCATION
-        = "/weblogic/ejb20/dd/xml/weblogic600-ejb-jar.dtd";
-
-    protected final static String DEFAULT_COMPILER = "default";
-
-    protected final static String WL_DD = "weblogic-ejb-jar.xml";
-    protected final static String WL_CMP_DD = "weblogic-cmp-rdbms-jar.xml";
-
-    protected final static String COMPILER_EJB11 = "weblogic.ejbc";
-    protected final static 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_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(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);
-                }
-            }
-            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 a1c2fa0..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-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 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 final static 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 dc02828..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebsphereDeploymentTool.java
+++ /dev/null
@@ -1,881 +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 acknowasegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowasegement may appear in the software itself,
- *    if and wherever such third-party acknowasegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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
-     */
-    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 final static String PUBLICID_EJB11
-        = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN";
-    public final static String PUBLICID_EJB20
-        = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN";
-    protected final static String SCHEMA_DIR = "Schema/";
-        
-    protected final static String WAS_EXT = "ibm-ejb-jar-ext.xmi";
-    protected final static String WAS_BND = "ibm-ejb-jar-bnd.xmi";
-    protected final static String WAS_CMP_MAP = "Map.mapxmi";
-    protected final static 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);
-        }
-        /*
-        // need to create a generic jar first.
-        File genericJarFile = super.getVendorOutputJarFile(baseName);
-        super.writeJar(baseName, genericJarFile, files, publicId);
-                
-        if (alwaysRebuild || isRebuildRequired(genericJarFile, jarFile)) {
-        buildWebsphereJar(genericJarFile, jarFile);
-        }
-        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 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())  || // Crc's Match
-                                            (genericEntry.getSize() != wasEntry.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 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/i18n/Translate.java b/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java
deleted file mode 100644
index d42b8be..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java
+++ /dev/null
@@ -1,592 +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 530f8b5..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJAntTool.java
+++ /dev/null
@@ -1,151 +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 final static 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 45f4b25..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJAntToolGUI.java
+++ /dev/null
@@ -1,1407 +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 final static 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 16c7043..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 a260041..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExportServlet.java
+++ /dev/null
@@ -1,172 +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;
-
-/**
- * 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 final static String WITH_DEBUG_INFO = "deb";
-    public final static 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 0b00a8a..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 94ba4c8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImportServlet.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.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 599b0e8..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 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:  
- *       "This product includes software developed by the 
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written 
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 d8a1d78..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 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:  
- *       "This product includes software developed by the 
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written 
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 953f946..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 final static 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 63237cb..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java
+++ /dev/null
@@ -1,471 +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.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 4be5863..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 90408b1..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 f274b19..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java
+++ /dev/null
@@ -1,227 +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.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 final static String DIR_PARAM = "dir";
-    public final static String INCLUDE_PARAM = "include";
-    public final static String EXCLUDE_PARAM = "exclude";
-    public final static String CLASSES_PARAM = "cls";
-    public final static String SOURCES_PARAM = "src";
-    public final static String RESOURCES_PARAM = "res";
-    public final static String DEFAULT_EXCLUDES_PARAM = "dex";
-    public final static 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 4eaf7c6..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 final static 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/javacc/JJTree.java b/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
deleted file mode 100644
index 24c7d80..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
+++ /dev/null
@@ -1,228 +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.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 final static String BUILD_NODE_FILES  = "BUILD_NODE_FILES";
-    private final static String MULTI             = "MULTI";
-    private final static String NODE_DEFAULT_VOID = "NODE_DEFAULT_VOID";
-    private final static String NODE_FACTORY      = "NODE_FACTORY";
-    private final static String NODE_SCOPE_HOOK   = "NODE_SCOPE_HOOK";
-    private final static String NODE_USES_PARSER  = "NODE_USES_PARSER";
-    private final static String STATIC            = "STATIC";
-    private final static String VISITOR           = "VISITOR";
-
-    private final static String NODE_PACKAGE      = "NODE_PACKAGE";
-    private final static String VISITOR_EXCEPTION = "VISITOR_EXCEPTION";
-    private final static 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());
-
-        if (javaccHome == null || !javaccHome.isDirectory()) {
-            throw new BuildException("Javacchome not set.");
-        }
-        final Path classpath = cmdl.createClasspath(project);
-        classpath.createPathElement().setPath(javaccHome.getAbsolutePath() +
-                                                  "/JavaCC.zip");
-        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.toString(), 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 65c5827..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java
+++ /dev/null
@@ -1,288 +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.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 final static String LOOKAHEAD              = "LOOKAHEAD";
-    private final static String CHOICE_AMBIGUITY_CHECK = "CHOICE_AMBIGUITY_CHECK";
-    private final static String OTHER_AMBIGUITY_CHECK  = "OTHER_AMBIGUITY_CHECK";
-
-    private final static String STATIC                 = "STATIC";
-    private final static String DEBUG_PARSER           = "DEBUG_PARSER";
-    private final static String DEBUG_LOOKAHEAD        = "DEBUG_LOOKAHEAD";
-    private final static String DEBUG_TOKEN_MANAGER    = "DEBUG_TOKEN_MANAGER";
-    private final static String OPTIMIZE_TOKEN_MANAGER = "OPTIMIZE_TOKEN_MANAGER";
-    private final static String ERROR_REPORTING        = "ERROR_REPORTING";
-    private final static String JAVA_UNICODE_ESCAPE    = "JAVA_UNICODE_ESCAPE";
-    private final static String UNICODE_INPUT          = "UNICODE_INPUT";
-    private final static String IGNORE_CASE            = "IGNORE_CASE";
-    private final static String COMMON_TOKEN_ACTION    = "COMMON_TOKEN_ACTION";
-    private final static String USER_TOKEN_MANAGER     = "USER_TOKEN_MANAGER";
-    private final static String USER_CHAR_STREAM       = "USER_CHAR_STREAM";
-    private final static String BUILD_PARSER           = "BUILD_PARSER";
-    private final static String BUILD_TOKEN_MANAGER    = "BUILD_TOKEN_MANAGER";
-    private final static String SANITY_CHECK           = "SANITY_CHECK";
-    private final static String FORCE_LA_CHECK         = "FORCE_LA_CHECK";
-    private final static 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());
-
-        if (javaccHome == null || !javaccHome.isDirectory()) {
-            throw new BuildException("Javacchome not set.");
-        }
-        final Path classpath = cmdl.createClasspath(project);
-        classpath.createPathElement().setPath(javaccHome.getAbsolutePath() +
-                                                  "/JavaCC.zip");
-        classpath.addJavaRuntime();
-
-        final Commandline.Argument arg = cmdl.createVmArgument();
-        arg.setValue("-mx140M");
-        arg.setValue("-Dinstall.root="+javaccHome.getAbsolutePath());
-
-        Execute.runCommand(this, cmdl.getCommandline());
-    }
-
-    /**
-     * 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 1f51db6..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTask.java
+++ /dev/null
@@ -1,432 +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 final static int SUCCESS = 0;
-    /**
-     * An error occured.
-     */
-    private final static 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("Executing: "+commandline.toString(), 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 1264558..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jlink/ClassNameReader.java
+++ /dev/null
@@ -1,163 +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.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 extends Object{
-
-    final static 
-        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 c47e665..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 91c91de..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jlink/jlink.java
+++ /dev/null
@@ -1,431 +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/>.
- */
-
-/**
- * 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 1c2ad59..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java
+++ /dev/null
@@ -1,414 +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 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.CompilerAdapter;
-import org.apache.tools.ant.taskdefs.optional.jsp.compilers.CompilerAdapterFactory;
-
-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>
- *
- * @version $Revision$ $Date$
- * @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>
- */
-public class JspC extends MatchingTask
-{
-    /* ------------------------------------------------------------ */
-    private Path classpath;
-    private Path src;
-    private File destDir;
-    private String packageName ;
-    private String iepluginid ;
-    private boolean mapped ;
-    private int verbose = 0;
-    protected Vector compileList = new Vector();
-    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;
-        
-    private final static 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;
-    }
-    /* ------------------------------------------------------------ */
-    public Vector getCompileList(){
-        return compileList;
-    }
-    /* ------------------------------------------------------------ */
-    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);
-        }
-
-        // calculate where the files will end up:
-        File dest = null;
-        if (packageName == null) {
-            dest = destDir;
-        } else {
-            String path = destDir.getPath() + File.separatorChar +
-                packageName.replace('.', File.separatorChar);
-            dest = new File(path);
-        }
-
-        // 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, files);
-        }
-
-        // compile the source files
-
-        String compiler = project.getProperty("jsp.compiler");
-        if (compiler == null) {
-            compiler = "jasper";
-        }
-        log("compiling "+compileList.size()+" files",Project.MSG_VERBOSE);
-
-        if (compileList.size() > 0) {
-
-            CompilerAdapter adapter =
-                CompilerAdapterFactory.getCompiler(compiler, this);
-            log("Compiling " + compileList.size() +
-                " source file"
-                + (compileList.size() == 1 ? "" : "s")
-                + (destDir != null ? " to " + destDir : ""));
-
-            // now we need to populate the compiler adapter
-            adapter.setJspc( this );
-
-            // finally, lets execute the compiler!!
-            if (!adapter.execute()) {
-                if (failOnError) {
-                    throw new BuildException(FAIL_MSG, location);
-                }
-                else {
-                    log(FAIL_MSG, Project.MSG_ERR);
-                }
-            }
-        }
-        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);
-            }
-        }
-    }
-    /* ------------------------------------------------------------ */
-    /**
-     * 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 destDir, String files[]) {
-
-        long now = (new Date()).getTime();
-
-        for (int i = 0; i < files.length; i++) {
-            File srcFile = new File(srcDir, files[i]);
-            if (files[i].endsWith(".jsp")) {
-                // drop leading path (if any)
-                int fileStart =
-                    files[i].lastIndexOf(File.separatorChar) + 1;
-                File javaFile = new File(destDir, files[i].substring(fileStart,
-                                                                     files[i].indexOf(".jsp")) + ".java");
-
-                if (srcFile.lastModified() > now) {
-                    log("Warning: file modified in the future: " +
-                        files[i], Project.MSG_WARN);
-                }
-
-                if (!javaFile.exists() ||
-                    srcFile.lastModified() > javaFile.lastModified())
-                    {
-                        if (!javaFile.exists()) {
-                            log("Compiling " + srcFile.getPath() +
-                                " because java file "
-                                + javaFile.getPath() + " does not exist",
-                                Project.MSG_DEBUG);
-                        } else {
-                            log("Compiling " + srcFile.getPath() +
-                                " because it is out of date with respect to "
-                                + javaFile.getPath(), Project.MSG_DEBUG);
-                        }
-                        compileList.addElement(srcFile.getAbsolutePath());
-                    }
-            }
-        }
-    }
-    /* ------------------------------------------------------------ */
-}
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 cca3053..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java
+++ /dev/null
@@ -1,346 +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.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/CompilerAdapter.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/CompilerAdapter.java
deleted file mode 100644
index e03f0cb..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/CompilerAdapter.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.optional.jsp.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.optional.jsp.JspC;
-
-/**
- * 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 CompilerAdapter {
-
-    /**
-     * 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;
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/CompilerAdapterFactory.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/CompilerAdapterFactory.java
deleted file mode 100644
index 3149f34..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/CompilerAdapterFactory.java
+++ /dev/null
@@ -1,125 +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.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 CompilerAdapterFactory {
-
-    /** This is a singlton -- 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>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 CompilerAdapter 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 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( 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/jsp/compilers/DefaultCompilerAdapter.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/DefaultCompilerAdapter.java
deleted file mode 100644
index 17e909b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/DefaultCompilerAdapter.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.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;
-
-/**
- * This is the default implementation for the CompilerAdapter 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 DefaultCompilerAdapter
-    implements CompilerAdapter
-{
-    /* ------------------------------------------------------------ */
-    private static String lSep = System.getProperty("line.separator");
-    /* ------------------------------------------------------------ */
-    /**
-     * Logs the compilation parameters, adds the files to compile and logs the 
-     * &qout;niceSourceList&quot;
-     */
-    protected void logAndAddFilesToCompile(JspC jspc,
-                                           Vector compileList,
-                                           Commandline cmd)
-    {
-        jspc.log("Compilation args: " + cmd.toString(), 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);
-    }
-    /* ------------------------------------------------------------ */
-    protected JspC attributes;
-    public void setJspc( JspC attributes ) {
-        this.attributes = attributes;
-    }
-    public JspC getJspc() {
-        return attributes;
-    }
-    /* ------------------------------------------------------------ */
-}
-
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 93a40a3..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java
+++ /dev/null
@@ -1,137 +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.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.taskdefs.optional.jsp.JspC;
-import org.apache.tools.ant.taskdefs.Java;
-
-/**
- * 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>
- */
-public class JasperC extends DefaultCompilerAdapter
-{
-    /* ------------------------------------------------------------ */
-    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
-            Java java = (Java)(getJspc().getProject()).createTask("java");
-            if (getJspc().getClasspath() != null) {
-                java.setClasspath(getJspc().getClasspath());
-            }
-            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(true);
-            java.execute();
-            return true;
-        }
-        catch (Exception ex) {
-            if (ex instanceof BuildException) {
-                throw (BuildException) ex;
-            } else {
-                throw new BuildException("Error running jsp compiler: ",
-                                         ex, getJspc().getLocation());
-            }
-        }
-    }
-    /* ------------------------------------------------------------ */
-    private Commandline setupJasperCommand() {
-        Commandline cmd = new Commandline();
-        JspC jspc = getJspc();
-        if (jspc.getDestdir() != null) {
-            cmd.createArgument().setValue("-d");
-            cmd.createArgument().setFile(jspc.getDestdir());
-        }
-        if (jspc.getPackage() != null){
-            cmd.createArgument().setValue("-p");
-            cmd.createArgument().setValue(jspc.getPackage());
-        }
-        if (jspc.getVerbose() != 0) {
-            cmd.createArgument().setValue("-v" + jspc.getVerbose());
-        }
-        if (jspc.isMapped()){
-            cmd.createArgument().setValue("-mapped");
-        }
-        if (jspc.getIeplugin() != null){
-            cmd.createArgument().setValue("-ieplugin");
-            cmd.createArgument().setValue(jspc.getIeplugin());
-        }
-        if (jspc.getUriroot() != null){
-            cmd.createArgument().setValue("-uriroot");
-            cmd.createArgument().setValue(jspc.getUriroot().toString());
-        }
-        if (jspc.getUribase() != null){
-            cmd.createArgument().setValue("-uribase");
-            cmd.createArgument().setValue(jspc.getUribase().toString());
-        }
-        logAndAddFilesToCompile(getJspc(), getJspc().getCompileList(), cmd);
-        return cmd;
-    }
-    /* ------------------------------------------------------------ */        
-}
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 4a35463..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java
+++ /dev/null
@@ -1,226 +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 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;
-import org.w3c.dom.Element;
-
-
-
-
-
-
-
-/**
- * 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 final static String FRAMES = "frames";
-
-    public final static 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 */
-    protected final static DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
-
-    public AggregateTransformer(Task task){
-        this.task = task;
-    }
-
-    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 = dbfactory.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 53d82fc..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-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.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 6d82b42..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-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 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 b7d64aa..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 9a912bd..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 07e662f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java
+++ /dev/null
@@ -1,224 +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 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 9bd8c5a..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 d9672e1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
+++ /dev/null
@@ -1,767 +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 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.Random;
-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.
- * 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> 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> 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.
- * For example, <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> 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> 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> 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.
- * <ul>
- * <li>{@link #setTimeout} property sets the maximum time allowed before a test is 'timed out'
- * <li>{@link #setMaxmemory} property sets memory assignment for the forked jvm
- * <li>{@link #setJvm} property allows the jvm to be specified
- * <li>The <code>&lt;jvmarg&gt;</code> element sets arguements to be passed to the forked jvm
- * </ul>
- * @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$
- *
- * @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;
-
-    /**
-     * Tells this task whether to smartly filter the stack frames of JUnit testcase
-     * errors and failures before reporting them.  This property is applied on all
-     * BatchTest (batchtest) and JUnitTest (test) however it can possibly be
-     * overridden by their own properties.
-     * @param   value   <tt>false</tt> if it should not filter, otherwise <tt>true<tt>
-     */
-    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>
-     */
-    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.
-     * This property is applied on all BatchTest (batchtest) and JUnitTest (test),
-     * however, it can possibly be overriden by their own properties.
-     * @param  propertyName  the name of the property to set in the event of an error.
-     */
-    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>
-     */
-    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.
-     * This property is applied on all BatchTest (batchtest) and JUnitTest (test),
-     * however, it can possibly be overriden by their own properties.
-     * @param  propertyName  the name of the property to set in the event of an failure.
-     */
-    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. 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.
-     * @param   value   <tt>true</tt> if a JVM should be forked, otherwise <tt>false</tt>
-     * @see #setTimeout
-     */
-    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
-     */
-    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). If the test is running for more than this
-     * value, the test will be canceled. (works only when in 'fork' mode).
-     * @param   value   the maximum time (in milliseconds) allowed before declaring the test
-     *                  as 'timed-out'
-     * @see #setFork(boolean)
-     */
-    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.
-     */
-    public void setMaxmemory(String max) {
-        if (Project.getJavaVersion().startsWith("1.1")) {
-            createJvmarg().setValue("-mx"+max);
-        } else {
-            createJvmarg().setValue("-Xmx"+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)
-     */
-    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)
-     */
-    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)
-     */
-    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.
-     */
-    public void addSysproperty(Environment.Variable sysp) {
-        commandline.addSysproperty(sysp);
-    }
-
-    /**
-     * <code>&lt;classpath&gt;</code> allows classpath to be set for tests.
-     */
-    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.
-     *
-     * @since 1.33, 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 1.33, Ant 1.5
-     */
-    public void setNewenvironment(boolean newenv) {
-        newEnvironment = newenv;
-    }
-
-    /**
-     * Add a new single testcase.
-     * @param   test    a new single testcase
-     * @see JUnitTest
-     */
-    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
-     */
-    public BatchTest createBatchTest() {
-        BatchTest test = new BatchTest(project);
-        batchTests.addElement(test);
-        return test;
-    }
-
-    /**
-     * Add a new formatter to all tests of this task.
-     */
-    public void addFormatter(FormatterElement fe) {
-        formatters.addElement(fe);
-    }
-
-    /**
-     * Whether to include ant.jar, optional.jar and junit.jar in the forked VM.
-     *
-     * @since 1.37, Ant 1.5
-     */
-    public void setIncludeantruntime(boolean b) {
-        includeAntRuntime = b;
-    }
-
-    /**
-     * Creates a new JUnitRunner and enables fork of a new Java VM.
-     */
-    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.
-     */
-    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.
-     */
-    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 test) throws BuildException {
-        // 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.setProperty(test.getErrorProperty(), "true");
-                }
-                if (failureOccurredHere && test.getFailureProperty() != null) {
-                    project.setProperty(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");
-        }
-
-        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 = new File("junit" + (new Random(System.currentTimeMillis())).nextLong() + ".properties");
-        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) {
-            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("Executing: "+cmd.toString(), 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;
-    }
-
-    // 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)
-
-
-    protected void handleOutput(String line) {
-        if (runner != null) {
-            runner.handleOutput(line);
-        }
-        else {
-            super.handleOutput(line);
-        }
-    }
-
-    protected void handleErrorOutput(String line) {
-        if (runner != null) {
-            runner.handleErrorOutput(line);
-        }
-        else {
-            super.handleErrorOutput(line);
-        }
-    }
-
-    /**
-     * Execute inside VM.
-     */
-    private int executeInVM(JUnitTest test) throws BuildException {
-        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 classpath = (Path) commandline.getClasspath().clone();
-            if (includeAntRuntime) {
-                log("Implicitly adding "+antRuntimeClasses+" to CLASSPATH", 
-                    Project.MSG_VERBOSE);
-                classpath.append(antRuntimeClasses);
-            }
-
-            if (classpath != null) {
-                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();
-            }
-            //cl.resetThreadContextLoader();
-        }
-    }
-
-    /**
-     * @return <tt>null</tt> if there is a timeout value, otherwise the
-     * watchdog instance.
-     */
-    protected ExecuteWatchdog createWatchdog() throws BuildException {
-        if (timeout == null){
-            return null;
-        }
-        return new ExecuteWatchdog(timeout.intValue());
-    }
-
-    /**
-     * Get the default output for a formatter.
-     */
-    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>.
-     */
-    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);
-    }
-
-    protected Enumeration allTests() {
-        Enumeration[] enums = { tests.elements(), batchTests.elements() };
-        return Enumerations.fromCompound(enums);
-    }
-
-    private FormatterElement[] mergeFormatters(JUnitTest test){
-        Vector feVector = (Vector)formatters.clone();
-        test.addFormattersTo(feVector);
-        FormatterElement[] feArray = new FormatterElement[feVector.size()];
-        feVector.copyInto(feArray);
-        return feArray;
-    }
-
-    /** return the file or null if does not use a file */
-    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>
-     */
-    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 924f997..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTest.java
+++ /dev/null
@@ -1,190 +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.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>
- *
- * @see JUnitTask
- * @see JUnitTestRunner
- */
-public class JUnitTest extends BaseTest {
-    
-    /** 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) );
-        }
-    }
-}
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 d7b123a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
+++ /dev/null
@@ -1,518 +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.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.PrintStream;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.FileInputStream;
-import java.io.File;
-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>
- */
-
-public class JUnitTestRunner implements TestListener {
-
-    /**
-     * No problems with this test.
-     */
-    public final static int SUCCESS = 0;
-
-    /**
-     * Some tests failed.
-     */
-    public final static int FAILURES = 1;
-
-    /**
-     * An error occured.
-     */
-    public final static 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;
-    
-    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."
-        };
-
-    
-    /**
-     * 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;    
-    
-    /**
-     * 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, null);
-    }
-
-    /**
-     * Constructor to use when the user has specified a classpath.
-     */
-    public JUnitTestRunner(JUnitTest test, boolean haltOnError, boolean filtertrace,
-                           boolean haltOnFailure, ClassLoader loader) {
-        this.filtertrace = filtertrace;
-        this.junitTest = test;
-        this.haltOnError = haltOnError;
-        this.haltOnFailure = haltOnFailure;
-
-        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);
-
-            try {
-                suite.run(res);
-            } finally {
-                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>
-     *
-     * </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();
-
-        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();
-            }
-        }
-        
-        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);
-        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;
-    }
-    
-} // 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 6a88984..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-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 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 0cb10df..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-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.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 3c32786..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java
+++ /dev/null
@@ -1,285 +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.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);
-        Text content = doc.createTextNode(output);
-        nested.appendChild(content);
-    }
-
-} // 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 1a85810..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java
+++ /dev/null
@@ -1,323 +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 final static String DEFAULT_DIR = ".";
-
-    /** the default file name: <tt>TESTS-TestSuites.xml</tt> */
-    public final static 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 = new FileOutputStream( file );
-        PrintWriter wri = new PrintWriter(new OutputStreamWriter(out, "UTF8"));
-        wri.write("<?xml version=\"1.0\"?>\n");
-        (new DOMElementWriter()).write(doc.getDocumentElement(), wri, 0, "  ");
-        wri.flush();
-        wri.close();
-        // writers do not throw exceptions, so check for them.
-        if (wri.checkError()){
-            throw new IOException("Error while writing DOM content");
-        }
-    }
-
-    /**
-     * <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 1263db8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan1Executor.java
+++ /dev/null
@@ -1,82 +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();
-        XSLTResultTarget target = new XSLTResultTarget(os);
-        processor.process( xml_src, xsl_src, target);
-    }
-}
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 476dd89..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan2Executor.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.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();
-        tformer.setParameter("output.dir", caller.toDir.getAbsolutePath());
-        Result result = new StreamResult(os);
-        tformer.transform(xml_src, result);
-    }
-}
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 affd880..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XalanExecutor.java
+++ /dev/null
@@ -1,133 +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 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 = new Xalan2Executor();
-        } 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 cd6ba58..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.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 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) {
-        if (Project.getJavaVersion().startsWith("1.1")) {
-            createJvmarg().setValue("-mx" + max);
-        } else {
-            createJvmarg().setValue("-Xmx" + 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.toString(), 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 f057f96..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).*)
-    final static 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 b131e5c..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 final static 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 */
-    final static 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 fdda40f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAuditStreamHandler.java
+++ /dev/null
@@ -1,267 +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.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-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;
-import org.apache.tools.ant.util.StringUtils;
-import org.apache.tools.ant.util.regexp.RegexpMatcher;
-import org.apache.tools.ant.util.regexp.RegexpMatcherFactory;
-
-
-/**
- * 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 6b01cdf..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 final static String CLASS = "class";
-
-    /** package construct, it should be look like 'com.mycompany.something' */
-    private final static String PACKAGE = "package";
-
-    /** FILE construct, it should look like something 'MyClass.java' or 'MyClass.class' */
-    private final static String FILE = "file";
-
-    /** METHOD construct, it should looke like something 'doSomething(...)' or 'doSomething()' */
-    private final static String METHOD = "method";
-
-    private final static 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 final static 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 final static NumberFormat METAMATA_NF;
-
-    private final static 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 89aa729..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java
+++ /dev/null
@@ -1,357 +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){
-        if (Project.getJavaVersion().startsWith("1.1")) {
-            createJvmarg().setValue("-mx" + max);
-        } else {
-            createJvmarg().setValue("-Xmx" + 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.toString(), 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 57a9d4a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
+++ /dev/null
@@ -1,969 +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.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 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>
- * </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>
- */
-public class FTP
-    extends Task
-{
-    protected final static int SEND_FILES   = 0;
-    protected final static int GET_FILES    = 1;
-    protected final static int DEL_FILES    = 2;
-    protected final static int LIST_FILES   = 3;
-    protected final static int MK_DIR       = 4;
-
-    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;
-
-    protected final static String[] ACTION_STRS = {
-        "sending",
-        "getting",
-        "deleting",
-        "listing",
-        "making directory"
-    };
-
-    protected final static String[] COMPLETED_ACTION_STRS = {
-        "sent",
-        "retrieved",
-        "deleted",
-        "listed",
-        "created directory"
-    };
-
-    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();
-                scandir(".", "", true); // always start from the current ftp working dir
-                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 = file.getName();
-                            if (isIncluded(name)) {
-                                if (!isExcluded(name)) {
-                                    dirsIncluded.addElement(name);
-                                    if (fast) {
-                                        scandir(name, vpath + name + File.separator, fast);
-                                    }
-                                } else {
-                                    dirsExcluded.addElement(name);
-                                }
-                            } else {
-                                dirsNotIncluded.addElement(name);
-                                if (fast && couldHoldIncluded(name)) {
-                                    scandir(name, vpath + name + File.separator, fast);
-                                }
-                            }
-                            if (!fast) {
-                                scandir(name, vpath + 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;
-    }
-
-    /**
-     * 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" 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!");
-        }
-    }
-
-    /**
-     * 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;
-        if (action == LIST_FILES) {
-            File pd = new File(listing.getParent());
-            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;
-            }
-
-            default: {
-                throw new BuildException("unknown ftp action " + action );
-            }
-            }
-        }
-
-        if (action == LIST_FILES) {
-            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 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
-        {
-            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 {
-
-                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.
-     * 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.
-     */
-    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 = new File(file.getParent());        // stay 1.1 compatible
-            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.
-     * 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.
-     */
-    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());
-                }
-            }
-
-            // 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 final static String[] validActions = {
-            "send", "put", "recv", "get", "del", "delete", "list", "mkdir"
-        };
-
-        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("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 5883a23..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/net/MimeMail.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.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/TelnetTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java
deleted file mode 100644
index 0786d7e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java
+++ /dev/null
@@ -1,382 +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.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");
-        }
-        public void addText(String s) { setString(s);}
-        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 e7ef534..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Add.java
+++ /dev/null
@@ -1,149 +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/>.
- *
- * 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 3ddcea5..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Base.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/>.
- *
- * 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 = "";
-
-    //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;
-    }
-
-    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("Execing " + cmdl, 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) {
-            throw new BuildException("Problem exec'ing P4 command: " + e.getMessage());
-        }
-    }
-}
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 3b75fa7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Change.java
+++ /dev/null
@@ -1,169 +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/>.
- *
- * 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 094584a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Counter.java
+++ /dev/null
@@ -1,139 +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/>.
- *
- * 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 253f052..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Edit.java
+++ /dev/null
@@ -1,89 +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/>.
- *
- * 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 c02ef9e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Have.java
+++ /dev/null
@@ -1,75 +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/>.
- *
- * 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 560a2a2..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Label.java
+++ /dev/null
@@ -1,192 +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/>.
- *
- * 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 3b91651..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Reopen.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/>.
- *
- * 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 16d01dc..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Revert.java
+++ /dev/null
@@ -1,106 +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/>.
- *
- * 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 b52396b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Submit.java
+++ /dev/null
@@ -1,102 +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/>.
- *
- * 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 f20c25f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Sync.java
+++ /dev/null
@@ -1,120 +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/>.
- *
- * 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 6d9ebdf..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/SimpleP4OutputHandler.java
+++ /dev/null
@@ -1,95 +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/>.
- *
- * 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 4eca41b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java
+++ /dev/null
@@ -1,540 +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/>.
- *
- * [Additional notices, if required by prior licensing conditions]
- *
- */
-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 final static String PCLI_EXE = "pcli";
-
-    /**
-     * Constant for the PCLI listversionedfiles recursive i a format "get" understands
-     */
-    private final static String PCLI_LVF_ARGS = "lvf -z -aw";
-
-    /**
-     * Constant for the thing to execute
-     */
-    private final static 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("Executing " + commandLine.toString(), 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 ae09491..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/PvcsProject.java
+++ /dev/null
@@ -1,77 +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.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 74157c9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/scm/AntStarTeamCheckOut.java
+++ /dev/null
@@ -1,1163 +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 final static 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 final static 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 final static 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 b15c084..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.toString(), 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 5b83c93..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.toString(), 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 06e9b81..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.toString(), 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 d6bf6bd..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 final static 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 1d72982..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 final static Hashtable actionMap = new Hashtable(3);
-
-    /** mapping of events to cryptic command line mnemonics */
-    private final static 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 981d005..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 final static 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 final static FilenameFilter DIRECTORY_FILTER = new DirectoryFilter();
-    private final static 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 9d42890..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 final static short ACC_PUBLIC = 1;
-    /** private access flag */
-    public final static short ACC_PRIVATE = 2;
-    /** protected access flag */
-    public final static short ACC_PROTECTED = 4;
-    /** static access flag */
-    public final static short ACC_STATIC = 8;
-    /** final access flag */
-    public final static short ACC_FINAL = 16;
-    /** super access flag */
-    public final static short ACC_SUPER = 32;
-    /** synchronized access flag */
-    public final static short ACC_SYNCHRONIZED = 32;
-    /** volatile access flag */
-    public final static short ACC_VOLATILE = 64;
-    /** transient access flag */
-    public final static short ACC_TRANSIENT = 128;
-    /** native access flag */
-    public final static short ACC_NATIVE = 256;
-    /** interface access flag */
-    public final static short ACC_INTERFACE = 512;
-    /** abstract access flag */
-    public final static short ACC_ABSTRACT = 1024;
-    /** strict access flag */
-    public final static 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 076539e..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 cceeab7..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 ebb7471..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 4521273..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCmd.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the 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 4c32b4d..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 b5cdc9c..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 24b8b43..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sound/AntSoundPlayer.java
+++ /dev/null
@@ -1,280 +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 4f9f0cc..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-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.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/starteam/StarTeamCheckin.java b/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamCheckin.java
deleted file mode 100644
index f4afc2c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamCheckin.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 1d85b91..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamCheckout.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.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 dc1babf..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamLabel.java
+++ /dev/null
@@ -1,153 +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 final static 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 ce6a0f8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamList.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the 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 final static 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 d95c449..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamTask.java
+++ /dev/null
@@ -1,365 +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 c5e7b28..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/TreeBasedTask.java
+++ /dev/null
@@ -1,496 +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 final static 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 final static 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 dfdda42..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.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.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 final static String SS_EXE = "ss";
-    /** */
-    public final static String PROJECT_PREFIX = "$";
-
-    /**
-     * The 'Get' command
-     */
-    public final static String COMMAND_GET = "Get";
-    /**
-     * The 'Checkout' command
-     */
-    public final static String COMMAND_CHECKOUT = "Checkout";
-    /**
-     * The 'Checkin' command
-     */
-    public final static String COMMAND_CHECKIN = "Checkin";
-    /**
-     * The 'Label' command
-     */
-    public final static String COMMAND_LABEL = "Label";
-    /**
-     * The 'History' command
-     */
-    public final static String COMMAND_HISTORY = "History";
-
-    /** */
-    public final static String FLAG_LOGIN = "-Y";
-    /** */
-    public final static String FLAG_OVERRIDE_WORKING_DIR = "-GL";
-    /** */
-    public final static String FLAG_AUTORESPONSE_DEF = "-I-";
-    /** */
-    public final static String FLAG_AUTORESPONSE_YES = "-I-Y";
-    /** */
-    public final static String FLAG_AUTORESPONSE_NO = "-I-N";
-    /** */
-    public final static String FLAG_RECURSION = "-R";
-    /** */
-    public final static String FLAG_VERSION = "-V";
-    /** */
-    public final static String FLAG_VERSION_DATE = "-Vd";
-    /** */
-    public final static String FLAG_VERSION_LABEL = "-VL";
-    /** */
-    public final static String FLAG_WRITABLE = "-W";
-    /** */
-    public final static String VALUE_NO = "-N";
-    /** */
-    public final static String VALUE_YES = "-Y";
-    /** */
-    public final static String FLAG_QUIET = "-O-";
-}
-
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 5a0b7fa..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCHECKIN.java
+++ /dev/null
@@ -1,242 +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 5964c47..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/MSVSSGET.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSGET.java
deleted file mode 100644
index 78fd099..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSGET.java
+++ /dev/null
@@ -1,365 +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 224a26f..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 final static String VALUE_FROMDATE = "~d";
-    public final static String VALUE_FROMLABEL = "~L";
-
-    public final static String FLAG_OUTPUT = "-O";
-    public final static 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 5b41b72..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSLABEL.java
+++ /dev/null
@@ -1,289 +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 final static 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 6228a1d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
+++ /dev/null
@@ -1,390 +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.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 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>
- */
-public abstract class DefaultRmicAdapter implements RmicAdapter {
-
-    private Rmic attributes;
-    private FileNameMapper mapper;
-
-    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 maps *.class to *getStubClassSuffix().class and - if
-     * stubversion is not 1.2 - to *getSkelClassSuffix().class.
-     */
-    public FileNameMapper getMapper() {
-        return mapper;
-    }
-
-    /**
-     * The CLASSPATH this rmic process will use.
-     */
-    public Path getClasspath() {
-        return getCompileClasspath();
-    }
-
-    /**
-     * Builds the compilation classpath.
-     */
-    protected Path getCompileClasspath() {
-        // add dest dir to classpath so that previously compiled and
-        // untouched classes are on classpath
-        Path classpath = new Path(attributes.getProject());
-        classpath.setLocation(attributes.getBase());
-
-        // Combine the build classpath with the system classpath, in an 
-        // order determined by the value of build.classpath
-
-        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 (Project.getJavaVersion().startsWith("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");
-        }
-
-        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 args: " + cmd.toString(),
-                       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);
-    }
-
-    private final static Random rand = new Random();
-
-    /**
-     * Mapper that possibly returns two file names, *_Stub and *_Skel.
-     */
-    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;
-            }
-
-            String base = name.substring(0, name.indexOf(".class"));
-            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 e371e4b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.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.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>
- */
-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 81817b0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapter.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.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> 
- */
-
-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 6519783..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
+++ /dev/null
@@ -1,146 +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.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>
- */
-public class RmicAdapterFactory {
-
-    /** This is a singlton -- can't create instances!! */
-    private RmicAdapterFactory() {
-    }
-
-    /**
-     * Based on the parameter passed in, this method creates the necessary
-     * factory desired.
-     *
-     * The current mapping for rmic names are as follows:
-     * <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 == null){
-            /* 
-             * When not specified rmicType, search SUN's rmic and
-             * Kaffe's rmic.
-             */
-            try {
-                Class.forName("sun.rmi.rmic.Main");
-                rmicType = "sun";
-            } catch (ClassNotFoundException cnfe) {
-                try {
-                    Class.forName("kaffe.rmi.rmic.RMIC");
-                    Class.forName("kaffe.tools.compiler.Compiler");
-                    rmicType = "kaffe";
-                } catch (ClassNotFoundException cnfk) {
-                    throw new BuildException("Couldn\'t guess rmic implementation");
-                }
-            }
-        }
-
-        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 b8b0af1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
+++ /dev/null
@@ -1,112 +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.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>
- */
-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 f4d0c9f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java
+++ /dev/null
@@ -1,123 +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>
- */
-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/Commandline.java b/src/main/org/apache/tools/ant/types/Commandline.java
deleted file mode 100644
index 1875faa..0000000
--- a/src/main/org/apache/tools/ant/types/Commandline.java
+++ /dev/null
@@ -1,404 +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 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;
-
-    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) {
-            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.
-     * Each commandline object has at most one instance of the argument class.
-     * @return the argument object.
-     */
-    public Argument createArgument() {
-        Argument argument = new Argument();
-        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();
-            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;
-        }
-    }
-
-    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());
-    }
-}
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 0014f65..0000000
--- a/src/main/org/apache/tools/ant/types/CommandlineJava.java
+++ /dev/null
@@ -1,396 +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.io.File;
-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.taskdefs.condition.Os;
-
-/**
- * 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(getJavaExecutableName());
-        setVmversion(Project.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());
-    }
-
-    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();
-    }
-
-    private String getJavaExecutableName() {
-        // This is the most common extension case - exe for windows and OS/2, 
-        // nothing for *nix.
-        String extension =  Os.isFamily("dos") ? ".exe" : "";
-
-        File jExecutable = null;
-
-        // On AIX using IBM's JDK 1.2 the java executable is in
-        // the java.home/../sh directory
-        if (Os.isName("aix")) {
-            jExecutable = new File(System.getProperty("java.home") +
-                                   "/../sh/java" + extension);
-        }
-        
-        if (jExecutable == null || !jExecutable.exists()) {
-            // Look for java in the java.home/../bin directory.  
-            jExecutable = new File(System.getProperty("java.home") +
-                                   "/../bin/java" + extension);
-        }
-
-        // 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.
-
-        if (jExecutable.exists() && !Os.isFamily("netware")) {
-            // 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 jExecutable.getAbsolutePath();
-        } else {
-            return "java";
-        }
-    }
-    
-}
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 be36b7e..0000000
--- a/src/main/org/apache/tools/ant/types/DataType.java
+++ /dev/null
@@ -1,209 +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.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 bff8727..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf 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/EnumeratedAttribute.java b/src/main/org/apache/tools/ant/types/EnumeratedAttribute.java
deleted file mode 100644
index 418cf8b..0000000
--- a/src/main/org/apache/tools/ant/types/EnumeratedAttribute.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.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;
-    }
-}
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 104633e..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf 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 a348fd2..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 a5f09e4..0000000
--- a/src/main/org/apache/tools/ant/types/FileSet.java
+++ /dev/null
@@ -1,342 +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);
-
-        final int count = additionalPatterns.size();
-        for (int i = 0; i < count; i++) {
-            Object o = additionalPatterns.elementAt(i);
-            defaultPatterns.append((PatternSet) o, p);
-        }
-
-        p.log( "FileSet: Setup file scanner in dir " + dir + 
-            " with " + defaultPatterns, Project.MSG_DEBUG );
-        
-        ds.setIncludes(defaultPatterns.getIncludePatterns(p));
-        ds.setExcludes(defaultPatterns.getExcludePatterns(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/src/main/org/apache/tools/ant/types/FilterSet.java b/src/main/org/apache/tools/ant/types/FilterSet.java
deleted file mode 100644
index f57c598..0000000
--- a/src/main/org/apache/tools/ant/types/FilterSet.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.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 final static String DEFAULT_TOKEN_START = "@";
-    
-    /** The default token end string */
-    public final static 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 fef1067..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf 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     <A href="mailto:conor@apache.org">Conor MacNeill</A>
- */
-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/Mapper.java b/src/main/org/apache/tools/ant/types/Mapper.java
deleted file mode 100644
index e839907..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-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.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/Path.java b/src/main/org/apache/tools/ant/types/Path.java
deleted file mode 100644
index d7554ad..0000000
--- a/src/main/org/apache/tools/ant/types/Path.java
+++ /dev/null
@@ -1,607 +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 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;
-
-    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;
-    }
-
-    /**
-     * 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 FileSet) {
-                FileSet fs = (FileSet) o;
-                DirectoryScanner ds = fs.getDirectoryScanner(getProject());
-                String[] s = ds.getIncludedFiles();
-                File dir = fs.getDir(getProject());
-                for (int j=0; j<s.length; j++) {
-                    File f = new File(dir, s[j]);
-                    String absolutePath = f.getAbsolutePath();
-                    addUnlessPresent(result, translateFile(absolutePath));
-                } 
-            }
-        }
-        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);
-        }
-    }
-
-    /**
-     * 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 (Project.getJavaVersion() == Project.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 848f562..0000000
--- a/src/main/org/apache/tools/ant/types/PatternSet.java
+++ /dev/null
@@ -1,458 +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);
-    }
-
-    /**
-     * 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
-                }
-            }
-        }
-    }
-
-    /**
-     * 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 1017580..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-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.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 510a6e7..0000000
--- a/src/main/org/apache/tools/ant/types/RegularExpression.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.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
-{
-    public final static String DATA_TYPE_NAME = "regexp";
-
-    // The regular expression factory
-    private final static 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 bdb09e3..0000000
--- a/src/main/org/apache/tools/ant/types/Substitution.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.types;
-
-
-import java.util.Stack;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.DataType;
-
-/***
- * 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
-{
-    public final static 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/ZipFileSet.java b/src/main/org/apache/tools/ant/types/ZipFileSet.java
deleted file mode 100644
index 71798e0..0000000
--- a/src/main/org/apache/tools/ant/types/ZipFileSet.java
+++ /dev/null
@@ -1,185 +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;
-
-/**
- * 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 prefix The prefix to prepend to entries in the zip file.
-     */
-    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);
-        }
-    }
-
-}
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 82c919f..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 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:  
- *       "This product includes software developed by the 
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written 
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf 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 46fbab5..0000000
--- a/src/main/org/apache/tools/ant/types/defaults.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-path=org.apache.tools.ant.types.Path
-fileset=org.apache.tools.ant.types.FileSet
-filelist=org.apache.tools.ant.types.FileList
-patternset=org.apache.tools.ant.types.PatternSet
-mapper=org.apache.tools.ant.types.Mapper
-filterset=org.apache.tools.ant.types.FilterSet
-description=org.apache.tools.ant.types.Description
-classfileset=org.apache.tools.ant.types.optional.depend.ClassfileSet
-substitution=org.apache.tools.ant.types.Substitution
-regexp=org.apache.tools.ant.types.RegularExpression
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 775bd9d..0000000
--- a/src/main/org/apache/tools/ant/types/optional/depend/ClassfileSet.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.types.optional.depend;
-
-
-
-import java.util.List;
-import java.util.ArrayList;
-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 DepSet is a FileSet, that enlists all classes that depend on a
- * certain class.
- *
- * A DependSet extends FileSets and uses another FileSet as input. 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 {
-    private List rootClasses = new ArrayList();
-
-    public static class ClassRoot {
-        private String rootClass;
-        
-        public void setClassname(String name) {
-            this.rootClass = name;
-        }
-        
-        public String getClassname() {
-            return rootClass;
-        }
-    }
-    
-    protected ClassfileSet(ClassfileSet s) {
-        super(s);
-        rootClasses = s.rootClasses;
-    }
-
-    public void setRootClass(String rootClass)
-        throws BuildException
-    {
-        rootClasses.add(rootClass);
-    }
-
-    /**
-     * Return the DirectoryScanner associated with this FileSet.
-     */
-    public DirectoryScanner getDirectoryScanner(Project p) {
-        DependScanner scanner = new DependScanner();
-        scanner.setBasedir(getDir(p));
-        scanner.setRootClasses(rootClasses);
-        scanner.scan();
-        return scanner;
-    } 
-    
-    public void addConfiguredRoot(ClassRoot root) {
-        rootClasses.add(root.getClassname());    
-    }
-
-    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 a3e82e7..0000000
--- a/src/main/org/apache/tools/ant/types/optional/depend/DependScanner.java
+++ /dev/null
@@ -1,203 +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.IOException;
-import java.util.List;
-import java.util.LinkedList;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.Iterator;
-import java.util.HashSet;
-
-import org.apache.tools.ant.util.depend.Dependencies;
-import org.apache.tools.ant.util.depend.Filter;
-import org.apache.tools.ant.DirectoryScanner;
-
-import org.apache.bcel.classfile.JavaClass;
-import org.apache.bcel.classfile.ClassParser;
-
-
-/**
- * An interface used to describe the actions required by any type of 
- * directory scanner.
- */
-public class DependScanner extends DirectoryScanner {
-    File basedir;
-    File baseClass;
-    List included = new LinkedList();
-
-    private List rootClasses;
-    
-    /**
-     * Sets the basedir for scanning. This is the directory that is scanned
-     * recursively. 
-     *
-     * @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.
-     *
-     * @return the basedir that is used for scanning
-     */
-    public File getBasedir() { return basedir; }
-
-    /**
-     * Sets the domain, where dependant classes are searched
-     *
-     * @param domain the domain
-     */
-    public void setRootClasses(List 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] = included.get(i) + ".class";
-            //System.err.println("  " + files[i]);
-        }
-        return files;
-    }
-
-    /**
-     * Scans the base directory for files that baseClass depends on
-     *
-     * @exception IllegalStateException when basedir was set incorrecly
-     */
-    public void scan() {
-        Dependencies visitor = new Dependencies();
-        
-        Set set = new TreeSet();
-
-        final String base;
-        try {
-            base = basedir.getCanonicalPath() + File.separator;
-        }
-        catch (Exception e) {
-            throw new IllegalArgumentException(e.getMessage());
-        }
-
-        for (Iterator rootClassIterator = rootClasses.iterator(); rootClassIterator.hasNext();) {
-            Set newSet = new HashSet();
-            String start = (String)rootClassIterator.next();
-            start = start.replace('.', '/');
-
-            newSet.add(start);
-            set.add(start);
-            
-            do {
-                Iterator i = newSet.iterator();
-                while (i.hasNext()) {
-                    String fileName = base + ((String)i.next()).replace('/', File.separatorChar) + ".class";
-                    
-                    try {
-                        JavaClass javaClass = new ClassParser(fileName).parse();
-                        javaClass.accept(visitor);
-                    }
-                    catch (IOException e) {
-                        System.err.println("exception: " +  e.getMessage());
-                    }
-                }
-                newSet.clear();
-                newSet.addAll(visitor.getDependencies());
-                visitor.clearDependencies();
-                
-                Dependencies.applyFilter(newSet, new Filter() {
-                    public boolean accept(Object object) {
-                        String fileName = base + ((String)object).replace('/', File.separatorChar) + ".class";
-                        return new File(fileName).exists();
-                    }
-                });
-                newSet.removeAll(set);
-                set.addAll(newSet);
-            }
-            while (newSet.size() > 0);
-        }
-        
-        included.clear();
-        included.addAll(set);
-    }
-
-    public void addDefaultExcludes() {}
-    public String[] getExcludedDirectories() { return null; }
-    public String[] getExcludedFiles() { return null; }
-    public String[] getIncludedDirectories() { return new String[0]; }
-    public String[] getNotIncludedDirectories() { return null; }
-    public String[] getNotIncludedFiles() { return null; }
-
-    public void setExcludes(String[] excludes) {}
-    public void setIncludes(String[] includes) {}
-    public void setCaseSensitive(boolean isCaseSensitive) {}
-}
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 c230e89..0000000
--- a/src/main/org/apache/tools/ant/util/DOMElementWriter.java
+++ /dev/null
@@ -1,317 +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; and control characters
-     * &lt; 0x20 as their entities.
-     */
-    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;
-            case '\t':
-            case '\n':
-            case '\r':
-                sb.append(c);
-                break;
-            default:
-                if (c < 0x20) {
-                    sb.append("&#x");
-                    sb.append(Integer.toHexString(c));
-                    sb.append(';');
-                } else {
-                    sb.append(c);
-                }
-                break;
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Escape control characters &lt; x20 as their entities.
-     *
-     * <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);
-            switch (c) {
-            case '\t':
-            case '\n':
-            case '\r':
-                sb.append(c);
-                break;
-                
-            default:
-                if (c < 0x20) {
-                    sb.append("&#x");
-                    sb.append(Integer.toHexString(c));
-                    sb.append(';');
-                } else {
-                    sb.append(c);
-                }
-                break;
-            }
-        }
-        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;
-    }
-}
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 45a7fcf..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 final static String ISO8601_DATETIME_PATTERN
-            = "yyyy-MM-dd'T'HH:mm:ss";
-
-    /**
-     * ISO8601-like pattern for date. <tt>yyyy-MM-dd</tt>
-     */
-    public final static String ISO8601_DATE_PATTERN
-            = "yyyy-MM-dd";
-
-    /**
-     * ISO8601-like pattern for time.  <tt>HH:mm:ss</tt>
-     */
-    public final static String ISO8601_TIME_PATTERN
-            = "HH:mm:ss";
-
-
-// code from Magesh moved from DefaultLogger and slightly modified
-    private final static MessageFormat MINUTE_SECONDS
-            = new MessageFormat("{0}{1}");
-
-    private final static double[] LIMITS = {0, 1, 2};
-
-    private final static String[] MINUTES_PART =
-            {"", "1 minute ", "{0,number} minutes "};
-
-    private final static String[] SECONDS_PART =
-            {"0 seconds", "1 second", "{1,number} seconds"};
-
-    private final static ChoiceFormat MINUTES_FORMAT =
-            new ChoiceFormat(LIMITS, MINUTES_PART);
-
-    private final static 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 7da78ba..0000000
--- a/src/main/org/apache/tools/ant/util/FileUtils.java
+++ /dev/null
@@ -1,644 +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.lang.reflect.Method;
-import java.text.DecimalFormat;
-import java.util.Random;
-import java.util.Stack;
-import java.util.StringTokenizer;
-
-import org.apache.tools.ant.BuildException; 
-import org.apache.tools.ant.Project; 
-import org.apache.tools.ant.types.FilterSetCollection; 
-
-/**
- * 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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</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;
-
-    /**
-     * Factory method.
-     */
-    public static FileUtils newFileUtils() {
-        return new FileUtils();
-    }
-
-    /**
-     * Empty constructor.
-     */
-    protected FileUtils() {}
-
-    /**
-     * 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.
-     * 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 {
-        
-        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();
-            }
-
-            if (filters != null && filters.hasFilters()) {
-                BufferedReader in = null;
-                BufferedWriter out = null;
-
-                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));
-                }
-
-                int length;
-                String newline = null;
-                String line = in.readLine();
-                while (line != null) {
-                    if (line.length() == 0) {
-                        out.newLine();
-                    } else {
-                        newline = filters.replaceTokens(line);
-                        out.write(newline);
-                        out.newLine();
-                    }
-                    line = in.readLine();
-                }
-
-                out.close();
-                in.close();
-            } else {
-                FileInputStream in = new FileInputStream(sourceFile);
-                FileOutputStream 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);
-
-                in.close();
-                out.close();
-            }
-
-            if (preserveLastModified) {
-                setFileLastModified(destFile, sourceFile.lastModified());
-            }
-        }
-    }
-
-    /**
-     * see whether we have a setLastModified method in File and return it.
-     */
-    protected final Method getSetLastModified() {
-        if (Project.getJavaVersion() == Project.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 (Project.getJavaVersion() == Project.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 (filename.startsWith(File.separator) ||
-
-            (filename.length() >= 2 &&
-             Character.isLetter(filename.charAt(0)) &&
-             filename.charAt(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
-        if (!path.startsWith(File.separator) &&
-            ! (path.length() >= 2 &&
-               Character.isLetter(path.charAt(0)) &&
-               path.charAt(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 (path.length() >= 2 &&
-            Character.isLetter(path.charAt(0)) &&
-            path.charAt(1) == ':') {
-
-            dosWithDrive = true;
-
-            char[] ca = path.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]);
-                }
-            }
-
-            path = sb.toString().replace('\\', File.separatorChar);
-            if (path.length() == 2) {
-                root = path;
-                path = "";
-            } else {
-                root = path.substring(0, 3);
-                path = path.substring(3);
-            }
-            
-        } 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;
-    }
-}
-
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 d2ca22a..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf 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/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/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 7a6cd00..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 694ff62..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf 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 e19afb7..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-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 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 731bea1..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf 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 final static 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/depend/Dependencies.java b/src/main/org/apache/tools/ant/util/depend/Dependencies.java
deleted file mode 100644
index 277cfed..0000000
--- a/src/main/org/apache/tools/ant/util/depend/Dependencies.java
+++ /dev/null
@@ -1,272 +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;
-
-import java.io.File;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.StringTokenizer;
-import java.util.TreeSet;
-import java.util.Iterator;
-import java.util.Collection;
-import org.apache.bcel.classfile.EmptyVisitor;
-import org.apache.bcel.classfile.JavaClass;
-import org.apache.bcel.classfile.ConstantPool;
-import org.apache.bcel.classfile.Code;
-import org.apache.bcel.classfile.CodeException;
-import org.apache.bcel.classfile.ConstantClass;
-import org.apache.bcel.classfile.ConstantDouble;
-import org.apache.bcel.classfile.ConstantFieldref;
-import org.apache.bcel.classfile.ConstantFloat;
-import org.apache.bcel.classfile.ConstantInteger;
-import org.apache.bcel.classfile.ConstantInterfaceMethodref;
-import org.apache.bcel.classfile.ConstantLong;
-import org.apache.bcel.classfile.ConstantMethodref;
-import org.apache.bcel.classfile.ConstantNameAndType;
-import org.apache.bcel.classfile.Constant;
-import org.apache.bcel.classfile.ConstantString;
-import org.apache.bcel.classfile.ConstantUtf8;
-import org.apache.bcel.classfile.ConstantValue;
-import org.apache.bcel.classfile.Deprecated;
-import org.apache.bcel.classfile.ExceptionTable;
-import org.apache.bcel.classfile.Field;
-import org.apache.bcel.classfile.InnerClass;
-import org.apache.bcel.classfile.InnerClasses;
-import org.apache.bcel.classfile.Method;
-import org.apache.bcel.classfile.LineNumber;
-import org.apache.bcel.classfile.LineNumberTable;
-import org.apache.bcel.classfile.LocalVariable;
-import org.apache.bcel.classfile.LocalVariableTable;
-import org.apache.bcel.classfile.SourceFile;
-import org.apache.bcel.classfile.Synthetic;
-import org.apache.bcel.classfile.Unknown;
-import org.apache.bcel.classfile.StackMap;
-import org.apache.bcel.classfile.StackMapEntry;
-import org.apache.bcel.classfile.ClassParser;
-
-
-
-public class Dependencies extends EmptyVisitor {
-    private boolean verbose = false;
-
-    private JavaClass javaClass;
-    private ConstantPool constantPool;
-    private Set dependencies = new HashSet();
-
-    public void clearDependencies() {
-        dependencies.clear();
-    }
-    
-    public Set getDependencies() {
-        return dependencies;
-    }
-
-    public void visitConstantClass(ConstantClass obj) {
-        if (verbose) {
-            System.out.println("visit ConstantClass");
-            System.out.println(obj.getConstantValue(constantPool));
-        }
-        dependencies.add("" + obj.getConstantValue(constantPool));
-    }
-    
-    public void visitConstantPool(ConstantPool obj) {
-        if (verbose) {
-            System.out.println("visit ConstantPool");
-        }
-        this.constantPool = obj;
-
-        // visit constants
-        for(int idx = 0; idx < constantPool.getLength(); idx++) {
-            Constant c = constantPool.getConstant(idx);
-            if (c != null) {
-                c.accept(this);
-            }
-        }
-    }
-    
-    public void visitField(Field obj) {
-        if (verbose) {
-            System.out.println("visit Field");
-            System.out.println(obj.getSignature());
-        }
-        addClasses(obj.getSignature());
-    }
-
-    public void visitJavaClass(JavaClass obj) {
-        if (verbose) {
-            System.out.println("visit JavaClass");
-        }
-        
-        this.javaClass = obj;
-        dependencies.add(javaClass.getClassName().replace('.', '/'));
-
-        // visit constant pool
-        javaClass.getConstantPool().accept(this);
-
-        // visit fields
-        Field[] fields = obj.getFields();
-        for(int i=0; i < fields.length; i++) {
-            fields[i].accept(this);
-        }
-
-        // visit methods
-        Method[] methods = obj.getMethods();
-        for(int i=0; i < methods.length; i++) {
-            methods[i].accept(this);
-        }
-    }
-    
-    public void visitMethod(Method obj) {
-        if (verbose) {
-            System.out.println("visit Method");
-            System.out.println(obj.getSignature());
-        }
-        String signature = obj.getSignature();
-        int pos = signature.indexOf(")");
-        addClasses(signature.substring(1, pos));
-        addClasses(signature.substring(pos + 1));
-    }
-    
-    void addClasses(String string) {
-        StringTokenizer tokens = new StringTokenizer(string, ";");
-        while (tokens.hasMoreTokens()) {
-            addClass(tokens.nextToken());
-        }
-    }
-
-    void addClass(String string) {
-        int pos = string.indexOf('L');
-        if (pos != -1) {
-            dependencies.add(string.substring(pos+1));
-        }
-    }
-
-    public static void main(String[] args) {
-        try {
-            Dependencies visitor = new Dependencies();
-
-            Set set = new TreeSet();
-            Set newSet = new HashSet();
-
-            int o=0;
-            String arg = null;
-            if ("-base".equals(args[0])) {
-                arg = args[1];
-                if (!arg.endsWith(File.separator)) {
-                    arg = arg + File.separator;
-                }
-                o=2;
-            }
-            final String base = arg;
-
-            for (int i=o; i < args.length; i++) {
-                String fileName = args[i].substring(0, args[i].length() - ".class".length());
-                if (base != null && fileName.startsWith(base)) {
-                    fileName = fileName.substring(base.length());
-                }
-                newSet.add(fileName);
-            }
-            set.addAll(newSet);
-
-            do {
-                Iterator i = newSet.iterator();
-                while (i.hasNext()) {
-                    String fileName = i.next() + ".class";
-
-                    if (base != null) {
-                        fileName = base + fileName;
-                    }
-
-                    JavaClass javaClass = new ClassParser(fileName).parse();
-                    javaClass.accept(visitor);
-                }
-                newSet.clear();
-                newSet.addAll(visitor.getDependencies());
-                visitor.clearDependencies();
-
-                applyFilter(newSet, new Filter() {
-                        public boolean accept(Object object) {
-                            String fileName = object + ".class";
-                            if (base != null) {
-                                fileName = base + fileName;
-                            }
-                            return new File(fileName).exists();
-                        }
-                    });
-                newSet.removeAll(set);
-                set.addAll(newSet);
-            }
-            while (newSet.size() > 0);
-
-            Iterator i = set.iterator();
-            while (i.hasNext()) {
-                System.out.println(i.next());
-            }
-        }
-        catch (Exception e) {
-            System.err.println(e.getMessage());
-            e.printStackTrace(System.err);
-        }
-    }
-
-    public static void applyFilter(Collection collection, Filter filter) {
-        Iterator i = collection.iterator();
-        while (i.hasNext()) {
-            Object next = i.next();
-            if (!filter.accept(next)) {
-                i.remove();
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/depend/Filter.java b/src/main/org/apache/tools/ant/util/depend/Filter.java
deleted file mode 100644
index ace12fb..0000000
--- a/src/main/org/apache/tools/ant/util/depend/Filter.java
+++ /dev/null
@@ -1,60 +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.depend;
-
-
-
-public interface Filter {
-    boolean accept(Object object);
-}
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 97d3091..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/JakartaOroMatcher.java
+++ /dev/null
@@ -1,178 +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.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 35908e2..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/JakartaOroRegexp.java
+++ /dev/null
@@ -1,122 +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;
-
-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 60a015f..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/JakartaRegexpMatcher.java
+++ /dev/null
@@ -1,165 +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.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 a4ca701..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/JakartaRegexpRegexp.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.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 f139268..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpMatcher.java
+++ /dev/null
@@ -1,180 +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 2f54f23..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexp.java
+++ /dev/null
@@ -1,132 +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;
-
-
-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 1f946c3..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/Regexp.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.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 4d27eca..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/RegexpFactory.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.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 3873b32..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-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;
-
-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 f90ecd0..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 3e46544..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/RegexpUtil.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;
-
-/***
- * Regular expression utilities class which handles flag operations
- *
- * @author <a href="mailto:mattinger@mindless.com">Matthew Inger</a>
- */
-public class RegexpUtil extends Object
-{
-    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 4bab47c..0000000
--- a/src/main/org/apache/tools/bzip2/CBZip2InputStream.java
+++ /dev/null
@@ -1,870 +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;
-
-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 final static int START_BLOCK_STATE = 1;
-    private final static int RAND_PART_A_STATE = 2;
-    private final static int RAND_PART_B_STATE = 3;
-    private final static int RAND_PART_C_STATE = 4;
-    private final static int NO_RAND_PART_A_STATE = 5;
-    private final static int NO_RAND_PART_B_STATE = 6;
-    private final static 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() {
-        bsStream = null;
-    }
-
-    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 09a6957..0000000
--- a/src/main/org/apache/tools/bzip2/CBZip2OutputStream.java
+++ /dev/null
@@ -1,1674 +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;
-
-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 final static int SETMASK = (1 << 21);
-    protected final static int CLEARMASK = (~SETMASK);
-    protected final static int GREATER_ICOST = 15;
-    protected final static int LESSER_ICOST = 0;
-    protected final static int SMALL_THRESH = 20;
-    protected final static 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 final static 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 8e55e03..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made 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 352732b..0000000
--- a/src/main/org/apache/tools/mail/ErrorInQuitException.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.
- * ====================================================================
- *
- */
-
-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 8374d6f..0000000
--- a/src/main/org/apache/tools/mail/MailMessage.java
+++ /dev/null
@@ -1,496 +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.
- * ====================================================================
- *
- */
-
-/*
- * 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 final static 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 ad0ac0f..0000000
--- a/src/main/org/apache/tools/mail/SmtpResponseReader.java
+++ /dev/null
@@ -1,127 +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.
- * ====================================================================
- *
- */
-
-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 4822273..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made 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 final static int DEFAULT_RCDSIZE = (512);
-    public final static 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 1d2bb43..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-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 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 b247edd..0000000
--- a/src/main/org/apache/tools/tar/TarEntry.java
+++ /dev/null
@@ -1,607 +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/>.
- */
-
-/*
- * 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 c7f90b5..0000000
--- a/src/main/org/apache/tools/tar/TarOutputStream.java
+++ /dev/null
@@ -1,345 +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/>.
- */
-
-/*
- * 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 {
-    public final static int LONGFILE_ERROR = 0;
-    public final static int LONGFILE_TRUNCATE = 1;
-    public final static 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 111c6d9..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on 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 final static 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 005e988..0000000
--- a/src/main/org/apache/tools/zip/ExtraFieldUtils.java
+++ /dev/null
@@ -1,203 +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.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 d15c371..0000000
--- a/src/main/org/apache/tools/zip/UnrecognizedExtraField.java
+++ /dev/null
@@ -1,131 +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;
-
-/**
- * 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 eeb6a46..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on 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 565bf03..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on 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 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 a281301..0000000
--- a/src/main/org/apache/tools/zip/ZipOutputStream.java
+++ /dev/null
@@ -1,682 +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 final static byte[] ZERO = {0, 0};
-
-    /**
-     * Helper, a 0 as ZipLong.
-     *
-     * @since 1.1
-     */
-    private final static 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 final static int DEFLATED = ZipEntry.DEFLATED;
-
-    /**
-     * Compression method for deflated entries.
-     *
-     * @since 1.1
-     */
-    public final static 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 final static ZipLong LFH_SIG = new ZipLong(0X04034B50L);
-    /**
-     * data descriptor signature
-     *
-     * @since 1.1
-     */
-    protected final static ZipLong DD_SIG = new ZipLong(0X08074B50L);
-    /**
-     * central file header signature
-     *
-     * @since 1.1
-     */
-    protected final static ZipLong CFH_SIG = new ZipLong(0X02014B50L);
-    /**
-     * end of central dir signature
-     *
-     * @since 1.1
-     */
-    protected final static 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 final static 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 b4abf9f..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on 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 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 ef40931..0000000
--- a/src/script/ant
+++ /dev/null
@@ -1,146 +0,0 @@
-#! /bin/sh
-
-#   Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
-#   reserved.
-
-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 ;;
-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
-
-# add in the dependency .jar files
-DIRLIBS=${ANT_HOME}/lib/*.jar
-for i in ${DIRLIBS}
-do
-    # if the directory is empty, then it will return the input string
-    # this is stupid, so case for it
-    if [ "$i" != "${DIRLIBS}" ] ; then
-      if [ -z "$LOCALCLASSPATH" ] ; then
-        LOCALCLASSPATH=$i
-      else
-        LOCALCLASSPATH="$i":$LOCALCLASSPATH
-      fi
-    fi
-done
-
-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 [ -n "$ANT_OPTS" ] ; then
-    ANT_OPTS="$ANT_OPTS -Djikes.class.path=$JIKESPATH"
-  else
-    ANT_OPTS=-Djikes.class.path=$JIKESPATH
-  fi
-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 417cb9d..0000000
--- a/src/script/ant.bat
+++ /dev/null
@@ -1,113 +0,0 @@
-@echo off
-
-REM   Copyright (c) 2001 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 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 b138b1c..0000000
--- a/src/testcases/org/apache/tools/ant/BuildFileTest.java
+++ /dev/null
@@ -1,428 +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 <conor@apache.org> 
- */
-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 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);
-    }
-
-    /**
-     *  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);
-    }
-        
-    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;
-    }
-    
-    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) {
-            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) {
-            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);
-        String result = project.getProperty(property);
-        assertEquals("property " + property,value,result);
-    }
-
-
-    /**
-     * call a target, verify 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;
-    }
-
-    private class AntOutputStream extends java.io.OutputStream {
-        public void write(int b) { 
-            outBuffer.append((char)b);
-        }
-    }
-    
-    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 d99ce5f..0000000
--- a/src/testcases/org/apache/tools/ant/ProjectTest.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 org.apache.tools.ant.types.*;
-
-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
-             */
-            assertSame(Project.JAVA_1_1, p.getJavaVersion());
-            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"));
-    }
-        
-    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/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 4bb6b95..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/AntTest.java
+++ /dev/null
@@ -1,315 +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 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.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 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);
-    }
-
-    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 {
-                    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;
-        }
-
-    }
-
-}
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 7845098..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/AvailableTest.java
+++ /dev/null
@@ -1,192 +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 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.");
-    }
-}
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/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/ConditionTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ConditionTest.java
deleted file mode 100644
index 1106183..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/ConditionTest.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.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"); 
-    }   
-}
-
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 c42d672..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/CopyTest.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 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 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 (Project.getJavaVersion() != Project.JAVA_1_1) {
-            assertTrue(file3a.lastModified()==file3.lastModified());
-            assertTrue(file3c.lastModified()<file3a.lastModified());
-        }
-
-    }
-
-    public void testSingleFileFileset() {
-        executeTarget("test_single_file_fileset");
-        File file  = new File(getProjectDir(),
-                                        "copytest_single_file_fileset.tmp");
-        assertTrue(file.exists());
-    }
-
-    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));
-    }
-}
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/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/ExecuteWatchdogTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ExecuteWatchdogTest.java
deleted file mode 100644
index e131ae5..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/ExecuteWatchdogTest.java
+++ /dev/null
@@ -1,210 +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 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 (Project.getJavaVersion() == Project.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());
-    }
-
-    public static 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/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 df8a5e9..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/FixCrLfTest.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 java.io.*;
-
-import junit.framework.AssertionFailedError;
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.Project;
-
-/**
- * @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 (project.getJavaVersion() == Project.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 54b6979..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/InputTest.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;
-
-/**
- * @author Ulrich Schmidt <usch@usch.net>
- */
-public class InputTest extends BuildFileTest {
-
-    public InputTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/input.xml");
-    }
-
-    public void test1() {
-        expectLog("test1", "Press Return key to continue...");
-    }
-
-    public void test2() {
-        expectLog("test2", "Press Return key to continue...");
-    }
-
-    public void test3() {
-        String log = "All data is going to be deleted from DB continue (y/n)?";
-        String message = "Invalid input please reenter.";
-        try {
-            executeTarget("test3");
-        } catch (org.apache.tools.ant.BuildException e) {
-            String realLog = getLog();
-            assertEquals(log, realLog);
-            assertEquals(message, e.getMessage());
-        }
-    }
-
-    public void test5() {
-        expectLog("test5",
-                "All data is going to be deleted from DB continue (y/n)?");
-    }
-
-    public void test6() {
-        expectLog("test6",
-                "Please enter db-username:");
-        assertEquals("scott", project.getProperty("db.user"));
-    }
-
-}
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 4e924aa..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/JavaTest.java
+++ /dev/null
@@ -1,211 +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() {
-        executeTarget("testExcepting");
-    }
-    
-    public void testExceptingFoe() {
-        //if(runFatalTests) {
-            executeTarget("testExceptingFoe");
-        //}
-    }
-    
-    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 3736c0c..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/JavacTest.java
+++ /dev/null
@@ -1,210 +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 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(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.setImplementation("jikes");
-        args = javac.getCurrentCompilerArgs();
-        assertNotNull(args);
-        assertEquals("implementation is jikes but build.compiler is null", 
-                     0, args.length);
-
-        project.setProperty("build.compiler", "classic");
-        args = javac.getCurrentCompilerArgs();
-        assertNotNull(args);
-        assertEquals("implementation is jikes but build.compiler is classic", 
-                     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.setImplementation("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", 
-                   "modern".equals(compiler) || "classic".equals(compiler));
-
-        javac.setFork("true");
-        compiler = javac.getCompiler();
-        assertNotNull(compiler);
-        assertEquals("extJavac", compiler);
-
-        // check build.compiler provides defaults
-        javac.setFork("false");
-        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);
-    }
-
-}
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 09dd961..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/LoadFileTest.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;
-
-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
- * @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");
-        }
-    }
-
-        /**
-     * 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/ManifestTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ManifestTest.java
deleted file mode 100644
index e049ac6..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/ManifestTest.java
+++ /dev/null
@@ -1,286 +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 org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.Project;
-
-/**
- * Testcase for the Manifest class used in the jar task. 
- * 
- * @author Conor MacNeill <conor@apache.org>
- */
-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);
-        Object classPathAttr = mainSection.getAttribute("class-PATH");
-        assertTrue("Class path attribute should be a Vector", classPathAttr instanceof Vector);            
-    }
-     
-    /**
-     * 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);
-    }
-     
-    /**
-     * 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 d3167c2..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/MoveTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of 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));
-    }
-}
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 8edc637..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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- * @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/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 76b9d72..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/TarTest.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.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 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/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 a180314..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/UntarTest.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;
-
-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 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 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/ZipTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ZipTest.java
deleted file mode 100644
index 473fd1c..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"));
-
-        assert(zipFile.getEntry("ant.xml") != null);
-        assert(zipFile.getEntry("optional/jspc.xml") != null);
-        assert(zipFile.getEntry("zip/zipgroupfileset3.zip") != null);
-
-        assert(zipFile.getEntry("test6.mf") == null);
-        assert(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/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 0de6aec..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package org.apache.tools.ant.taskdefs.optional;
-
-import org.apache.tools.ant.taskdefs.XSLTLiaison;
-import org.apache.tools.ant.taskdefs.condition.Os;
-import org.apache.tools.ant.BuildException;
-
-import java.io.File;
-
-/* 
- * 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 {
-    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 {
-        return new TraXLiaison();
-    }
-
-    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:////"));
-    }
-
-}
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 63c0293..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/XslpLiaisonTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/XslpLiaisonTest.java
deleted file mode 100644
index e8d6fa2..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 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:  
- *       "This product includes software developed by the 
- *        Apache Software Foundation (http://www.apache.org/)."
- *    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/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/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 b04205c..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf 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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- */
-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/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 bb698da..0000000
--- a/src/testcases/org/apache/tools/ant/types/FileSetTest.java
+++ /dev/null
@@ -1,249 +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 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 TestCase {
-
-    private Project project;
-
-    public FileSetTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        project = new Project();
-        project.setBasedir(".");
-    }
-
-    public void testEmptyElementIfIsReference() {
-        FileSet f = new FileSet();
-        f.setIncludes("**/*.java");
-        try {
-            f.setRefid(new Reference("dummyref"));
-            fail("Can add reference to FileSet with elements from setIncludes");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        f = new FileSet();
-        f.createPatternSet();
-        try {
-            f.setRefid(new Reference("dummyref"));
-            fail("Can add reference to FileSet with nested patternset element.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using refid",
-                         be.getMessage());
-        }
-
-        f = new FileSet();
-        f.createInclude();
-        try {
-            f.setRefid(new Reference("dummyref"));
-            fail("Can add reference to FileSet with nested include element.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        f = new FileSet();
-        f.setRefid(new Reference("dummyref"));
-        try {
-            f.setIncludes("**/*.java");
-            fail("Can set includes in FileSet 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 FileSet 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 FileSet 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 FileSet 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 FileSet 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 FileSet 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 FileSet 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 FileSet 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 FileSet 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 FileSet that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using refid",
-                         be.getMessage());
-        }
-    }
-
-    public void testCircularReferenceCheck() {
-        FileSet f = new FileSet();
-        project.addReference("dummy", f);
-        f.setRefid(new Reference("dummy"));
-        try {
-            f.getDir(project);
-            fail("Can make FileSet a Reference to itself.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-        try {
-            f.getDirectoryScanner(project);
-            fail("Can make FileSet a Reference to itself.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-
-        // dummy1 --> dummy2 --> dummy3 --> dummy1
-        FileSet f1 = new FileSet();
-        project.addReference("dummy1", f1);
-        f1.setRefid(new Reference("dummy2"));
-        FileSet f2 = new FileSet();
-        project.addReference("dummy2", f2);
-        f2.setRefid(new Reference("dummy3"));
-        FileSet f3 = new FileSet();
-        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 = new FileSet();
-        project.addReference("dummy1", f1);
-        f1.setRefid(new Reference("dummy2"));
-        f2 = new FileSet();
-        project.addReference("dummy2", f2);
-        f2.setRefid(new Reference("dummy3"));
-        f3 = new FileSet();
-        project.addReference("dummy3", f3);
-        f3.setDir(project.resolveFile("."));
-        File dir = f1.getDir(project);
-        assertEquals("Die is basedir", dir, project.getBaseDir());
-    }
-}
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 84fc7cb..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 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf 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 <a href="mailto:conor@apache.org">Conor MacNeill</a>
- */
-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/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 3f37925..0000000
--- a/src/testcases/org/apache/tools/ant/types/PathTest.java
+++ /dev/null
@@ -1,482 +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;
-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> 
- */
-
-public class PathTest extends TestCase {
-
-    public static boolean isUnixStyle = File.pathSeparatorChar == ':';
-    public static boolean isNetWare = (System.getProperty("os.name").toLowerCase(Locale.US).indexOf("netware") > -1);
-
-    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());
-        }
-    }
-
-    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));
-        }
-    }
-
-}
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 e4977b1..0000000
--- a/src/testcases/org/apache/tools/ant/types/PatternSetTest.java
+++ /dev/null
@@ -1,225 +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 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]);
-    }
-}
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 4091785..0000000
--- a/src/testcases/org/apache/tools/ant/util/DOMElementWriterTest.java
+++ /dev/null
@@ -1,107 +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.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("&#x17;", w.encode("\u0017"));
-        assertEquals("&#20;\"20;&", w.encodedata("&#20;\"20;&"));
-        assertEquals("&#x17;", w.encodedata("\u0017"));
-    }
-}
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 6fc815c..0000000
--- a/src/testcases/org/apache/tools/ant/util/FileUtilsTest.java
+++ /dev/null
@@ -1,326 +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.*;
-
-import junit.framework.TestCase;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Tests for org.apache.tools.ant.util.FileUtils.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</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());
-
-        /*
-         * 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());
-        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());
-
-        /*
-         * 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")));
-    }
-
-    /**
-     * 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/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/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/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/antnews.xml b/xdocs/antnews.xml
deleted file mode 100644
index 95ee12a..0000000
--- a/xdocs/antnews.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0"?>
-<document>
-
-  <properties>
-    <author email="conor@cortexebusiness.com.au">Conor MacNeill</author>
-    <author email="stefan.bodewig@epost.de">Stefan Bodewig</author>
-    <title>Ant News</title>
-  </properties>
-
-<body>
-  <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="Vote for a Logo">
-    <h3>Polls have closed</h3>
-    <p>
-      Thanks for voting!
-    </p>
-     <p>*drum roll* - <a href="logocontest.html">and the winners are....</a></p>
-  </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 5c988ce..0000000
--- a/xdocs/external.xml
+++ /dev/null
@@ -1,713 +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="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="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="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>
-
-    </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 e92956c..0000000
--- a/xdocs/faq.xml
+++ /dev/null
@@ -1,879 +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'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's mailing lists,
-          the structure is hoped to be self-explaining.</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>
-      </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'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>
-      </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 &quot;make&quot; without makes 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 are
-        doing an extremely good job at building things&quot; or
-        &quot;Ants are very small and can carry a weight a dozen times
-        of 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 has been
-        created by James Duncan Davidson, who also is 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 now is 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.  Ant became Apache Ant.</p>
-
-        <p>The first version of Ant that was exposed a lager audience
-        was the one that shipped with Tomcat&apos;s 3.1 release on 19 April
-        2000.  This version has later been referenced 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 of this, 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 setup is different, 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>
-
-      </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: <code>ant
-        -D&lt;name&gt;=&lt;value&gt;</code> lets you define values for
-        properties.  These can then be used within your build file as
-        any normal property: <code>${&lt;name&gt;}</code> will put in
-        <code>&lt;value&gt;</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 magic
-          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 nowarn
-                attribute of javac after that</strong> -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'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.</p>
-
-      </answer>
-    </faq>
-
-    <faq id="defaultexcludes">
-
-      <question>I've made a &lt;delete&gt; task to delete unwanted
-      sourcesafe control files (CVS files, editor backup files), but
-      it doesn't seem to work. The files never get deleted. What's
-      wrong?</question>
-
-      <answer>
-        <p>This is probably happening because by default, Ant excludes
-        SourceSafe control files (<code>vssver.scc</code>) and other
-        files from FileSets.</p>
-
-        <p>Here'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">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 put both an <code>if</code> and an <code>unless</code>
-        attribute into the target. The target 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 wish 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, but 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 that <code>&lt;antcall&gt;</code> tasks do not pass
-        property changes back up to the environment they were called
-        from.</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 sequence <code>${</code>.</li>
-        </ul>
-
-        <p>This is neither readable, nor easy to understand, therefore
-        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
-        better 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.</p>
-      </answer>
-    </faq>
-    
-    <faq id="stop-dependency">
-      <question>I have a target I want to skip if a variable is set,
-      so I have <code>unless=&quot;variable&quot;</code> as an attribute 
-      of the target.  The trouble is that all of the targets that 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>When your dependencies actually break down the higher level task
-        into several simpler steps, though, this behaviour becomes 
-        counterintuitive. 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 fileset, 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 anything at all. What's wrong?
-      </question>
-
-      <answer>
-        <p>The order of the <code>&lt;include&gt;</code> and
-        <code>&lt;exclude&gt;</code> tags within a fileset 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 need to trim the list that the includes
-	would produce, use excludes.</p>
-      </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 page.</p>
-      </answer>
-    </faq>
-
-    <faq id="emacs-mode">
-      <question>Why doesn&apos;t (X)Emacs/vi/MacOS X's project builder
-      parse the error messages generated by Ant correctly?</question>
-      <answer>
-
-        <p>Ant adds a &quot;banner&quot; with the name of the current
-        task in front of all 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's
-        formatting is to pipe Ant'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 test (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">Listener
-        &amp; Logger documentation</a> 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> 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 are specified on the command line
-        when running Ant.</p>
-      </answer>
-    </faq>
-    
-  </faqsection>
-
-  <faqsection title="Known problems">
-    <faq id="remove-cr">
-      <question>&lt;chmod&gt; or &lt;exec&gt; don&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 &lt;fixcrlf&gt; 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>
-  </faqsection>
-
-</document>
diff --git a/xdocs/index.xml b/xdocs/index.xml
deleted file mode 100644
index 09f3a19..0000000
--- a/xdocs/index.xml
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0"?>
-<document>
-
-  <properties>
-    <author email="conor@cortexebusiness.com.au">Conor MacNeill</author>
-    <author email="stefan.bodewig@epost.de">Stefan Bodewig</author>
-    <title>Ant</title>
-  </properties>
-
-<body>
-
-  <section name="Logo Contest">
-    <h3>Polls have closed</h3>
-    <p>*drum roll* - <a href="logocontest.html">and the winners are....</a></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 without
-make's wrinkles.
-</p>
-
-<p>
-Why another build tool when there is already make, gnumake, nmake, jam, and
-others? Because all of 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 and 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 use yet another format to use and remember.
-</p>
-
-<p>
-Ant is different. Instead of a model where it is extended with shell based
-commands, it 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 which 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 `find . -name foo -exec rm {}` 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 exec rule 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 most recent release 
-<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/logocontest.xml b/xdocs/logocontest.xml
deleted file mode 100644
index 2929944..0000000
--- a/xdocs/logocontest.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<document>
-
-  <properties>
-    <author email="ehatcher@apache.org">Erik Hatcher</author>
-    <title>Ant Logo Content Results</title>
-  </properties>
-
-<body>
-
-  <section name="Poll Results">
-    <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>
-  </section>
-  
-  <section name="The Winner">
-    <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>
-  </section>
-  
-  <section name="Runner Up Entries">
-    <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>
-  </section>
-
-  <section name="ASCII Art Winner">
-  <p>
-  <pre>
-&lt;ant&gt;
- \_/
-\(_)/
--(_)-
-/(_)\
-</pre>
-Conor MacNeill (conor at cortexebusiness.com.au)
-  </p>
-  </section>
-  
-  <section name="The Contestants">
-    <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>
-    
-  </section>
-  
-  </body>
-</document>
diff --git a/xdocs/logos.xml b/xdocs/logos.xml
deleted file mode 100644
index 0596181..0000000
--- a/xdocs/logos.xml
+++ /dev/null
@@ -1,428 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<document>
-
-  <properties>
-    <author email="stefan.bodewig@epost.de">Stefan Bodewig</author>
-    <title>Ant Logo Proposals</title>
-  </properties>
-
-<body>
-
-  <section name="Ant needs a Logo">
-    <p>One of the requirements for Ant2 is, that Ant should have a
-    logo.  You can find the logos that have been proposed to the Ant
-    mailing lists on this page.</p>
-
-    <p>Tell us what you think of them (yes, <em>Powered by</em> should
-    better be <em>Built by</em>).</p>
-
-    <table>
-      <tr>
-        <th>Entry</th><th>Group</th><th>Author</th><th></th>
-      </tr>
-      <tr>
-        <td>1</td>
-        <td>1</td>
-        <td>Bill J. Fellows (Bill.J.Fellows at mail.sprint.com)</td>
-        <td><img src="images/antLogo1.png" /></td>
-      </tr>
-      <tr>
-        <td>2</td>
-        <td>1</td>
-        <td>Bill J. Fellows (Bill.J.Fellows at mail.sprint.com)</td>
-        <td><img src="images/antLogo2.png" /></td>
-      </tr>
-      <tr>
-        <td>3</td>
-        <td>2</td>
-        <td>Christoph Wilhelms (Christoph.Wilhelms at t-online.de)</td>
-        <td><img src="images/ant_logo.gif" /></td>
-      </tr>
-      <tr>
-        <td>4</td>
-        <td>2</td>
-        <td>Christoph Wilhelms (Christoph.Wilhelms at t-online.de)</td>
-        <td><img src="images/ant2_logo.gif" /></td>
-      </tr>
-      <tr>
-        <td>5</td>
-        <td>3</td>
-        <td>Warner Onstine (warner at warneronstine.com)</td>
-        <td><img src="images/ant-logo2.gif" /></td>
-      </tr>
-      <tr>
-        <td>6</td>
-        <td>4</td>
-        <td>Chris Coleman (chris.coleman at csfb.com)</td>
-        <td><img src="images/coleman.gif" /></td>
-      </tr>
-      <tr>
-        <td>7</td>
-        <td>5</td>
-        <td>Stefan Lecho (Stefan.Lecho at iconmedialab.com)</td>
-        <td><img src="images/lecho.jpg" /></td>
-      </tr>
-      <tr>
-        <td>8</td>
-        <td>6</td>
-        <td>David Trogdon (DTrogdon at orgtek.com)</td>
-        <td><img src="images/trogdon.gif" /></td>
-      </tr>
-      <tr>
-        <td>9</td>
-        <td>7</td>
-        <td>Mirko Klemm (Mirko.Klemm at t-online.de)</td>
-        <td><img src="http://www.mutantenzoo.de/antlogo-400.png" /></td>
-      </tr>
-      <tr>
-        <td>10</td>
-        <td>8</td>
-        <td>Ryan P Ripley (ryan.ripley at bms.com)</td>
-        <td><img src="images/ripley.jpg" /></td>
-      </tr>
-      <tr>
-        <td>11</td>
-        <td>9</td>
-        <td>Christoph Wilhelms (Christoph.Wilhelms at t-online.de)</td>
-        <td><img src="images/wilhelms3.gif" /></td>
-      </tr>
-      <tr>
-        <td>12</td>
-        <td>10</td>
-        <td>Shane Petroff (shane at hayward.ca)</td>
-        <td><img src="images/petroff.jpg" /></td>
-      </tr>
-      <tr>
-        <td>13</td>
-        <td>10</td>
-        <td>Jim Cheesman (jchees at msl.es)</td>
-        <td><img src="images/cheesman.jpg" /></td>
-      </tr>
-      <tr>
-        <td>14</td>
-        <td>11</td>
-        <td>Kevin Duggins (Kevin.Duggins at definityhealth.com)</td>
-        <td><img src="images/duggins.gif" /></td>
-      </tr>
-      <tr>
-        <td>15</td>
-        <td>12</td>
-        <td>Kevin Duggins (Kevin.Duggins at definityhealth.com)</td>
-        <td><img src="images/duggins2.gif" /></td>
-      </tr>
-      <tr>
-        <td>16</td>
-        <td>13</td>
-        <td>Justin Ransom (Justin.Ransom at rubus.com)</td>
-        <td><img src="images/hughes1.gif" /></td>
-      </tr>
-      <tr>
-        <td>17</td>
-        <td>14</td>
-        <td>Justin Ransom (Justin.Ransom at rubus.com)</td>
-        <td><img src="images/hughes2.gif" /></td>
-      </tr>
-      <tr>
-        <td>18</td>
-        <td>15</td>
-        <td>Martin Schl?mer (martin.schloemer at phase26.de)</td>
-        <td><img src="images/schloemer.gif" /></td>
-      </tr>
-      <tr>
-        <td>19</td>
-        <td>15</td>
-        <td>Martin Schl?mer (martin.schloemer at phase26.de)</td>
-        <td><img src="images/schloemer2.gif" /></td>
-      </tr>
-      <tr>
-        <td>20</td>
-        <td>16</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_ant.jpg"/></td>
-      </tr>
-      <tr>
-        <td>21</td>
-        <td>17</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_ant2.jpg"/></td>
-      </tr>
-      <tr>
-        <td>22</td>
-        <td>18</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_ant3.jpg"/></td>
-      </tr>
-      <tr>
-        <td>23</td>
-        <td>19</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_ant4.jpg"/></td>
-      </tr>
-      <tr>
-        <td>24</td>
-        <td>20</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_ant5.jpg"/></td>
-      </tr>
-      <tr>
-        <td>25</td>
-        <td>21</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_ant6.jpg"/></td>
-      </tr>
-      <tr>
-        <td>26</td>
-        <td>22</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_germ1.jpg"/></td>
-      </tr>
-      <tr>
-        <td>27</td>
-        <td>22</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_germ2.jpg"/></td>
-      </tr>
-      <tr>
-        <td>28</td>
-        <td>23</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_germ3.jpg"/></td>
-      </tr>
-      <tr>
-        <td>29</td>
-        <td>23</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_germ4.jpg"/></td>
-      </tr>
-      <tr>
-        <td>30</td>
-        <td>24</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_germ5.jpg"/></td>
-      </tr>
-      <tr>
-        <td>31</td>
-        <td>24</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_germ6.jpg"/></td>
-      </tr>
-      <tr>
-        <td>32</td>
-        <td>25</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_keis1.jpg"/></td>
-      </tr>
-      <tr>
-        <td>33</td>
-        <td>25</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_keis3.jpg"/></td>
-      </tr>
-      <tr>
-        <td>34</td>
-        <td>26</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_keis2.jpg"/></td>
-      </tr>
-      <tr>
-        <td>35</td>
-        <td>27</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_keis4.jpg"/></td>
-      </tr>
-      <tr>
-        <td>36</td>
-        <td>28</td>
-        <td>Design Services Team at Hewlett Packard (blair_hughes at hp.com></td>
-        <td><img src="images/blairhughes_keis5.jpg"/></td>
-      </tr>
-      <tr>
-        <td>37</td>
-        <td>29</td>
-        <td>Alicia Kolesnikova</td>
-        <td><img src="images/kolesnikova.gif"/></td>
-      </tr>
-      <tr>
-        <td>38</td>
-        <td>30</td>
-        <td>Matthias Becker (matthias.becker at media4content.de)</td>
-        <td><img src="images/becker1.gif"/></td>
-      </tr>
-      <tr>
-        <td>39</td>
-        <td>30</td>
-        <td>Matthias Becker (matthias.becker at media4content.de)</td>
-        <td><img src="images/becker2.gif"/></td>
-      </tr>
-      <tr>
-        <td>40</td>
-        <td>30</td>
-        <td>Matthias Becker (matthias.becker at media4content.de)</td>
-        <td><img src="images/becker3.gif"/></td>
-      </tr>
-      <tr>
-        <td>41</td>
-        <td>31</td>
-        <td>Alicia Kolesnikova</td>
-        <td><img src="images/bogaert.gif"/></td>
-      </tr>
-      <tr>
-        <td>42</td>
-        <td>32</td>
-        <td>Joe Marron (jmarron at contextmedia.com)</td>
-        <td><img src="images/marron.gif"/></td>
-      </tr>
-      <tr>
-        <td>43</td>
-        <td>33</td>
-        <td>Nick King (nickk at remoteapps.com)</td>
-        <td><img src="images/nicksant1.gif"/></td>
-      </tr>
-      <tr>
-        <td>44</td>
-        <td>33</td>
-        <td>Nick King (nickk at remoteapps.com)</td>
-        <td><img src="images/nicksants2.gif"/></td>
-      </tr>
-      <tr>
-        <td>45</td>
-        <td>33</td>
-        <td>Nick King (nickk at remoteapps.com)</td>
-        <td><img src="images/nicksant3.gif"/></td>
-      </tr>
-      <tr>
-        <td>46</td>
-        <td>16</td>
-        <td>Mike Whyte (mgwhyte at mailbox.co.za)</td>
-        <td><img src="images/mwhyte-ant.jpg"/></td>
-      </tr>
-      <tr>
-        <td>47</td>
-        <td>34</td>
-        <td>Shine Kannikkatt (ShineKannikkatt at onerev.com)</td>
-        <td><img src="images/kannikkatt.gif"/></td>
-      </tr>
-      <tr>
-        <td>48</td>
-        <td>35</td>
-        <td>Hirdesh Mishra (hmplus at yahoo.com)</td>
-        <td><img src="images/mishra.gif"/></td>
-      </tr>
-      <tr>
-        <td>49</td>
-        <td>36</td>
-        <td>nickk at remoteapps.com</td>
-        <td><img src="images/nickk.gif"/></td>
-      </tr>
-      <tr>
-        <td>50</td>
-        <td>37</td>
-        <td>fmignon at mail.com</td>
-        <td><img src="images/florent1.jpg"/></td>
-      </tr>
-      <tr>
-        <td>51</td>
-        <td>37</td>
-        <td>fmignon at mail.com</td>
-        <td><img src="images/florent2.jpg"/></td>
-      </tr>
-      <tr>
-        <td>52</td>
-        <td>38</td>
-        <td>Steve Krone (contact at sitepen.com)</td>
-        <td><img src="http://www.sitepen.com/portfolio/images/antlogo.jpg"/></td>
-      </tr>
-      <tr>
-        <td>53</td>
-        <td>39</td>
-        <td>Magesh Umasankar (umagesh at apache.org)</td>
-        <td><img src="images/umasankar.jpg"/></td>
-      </tr>
-      <tr>
-        <td>54</td>
-        <td>40</td>
-        <td>James Andrews (jimhole23 at yahoo.com)</td>
-        <td><img src="images/andrews.gif"/></td>
-      </tr>
-      <tr>
-        <td>55</td>
-        <td>41</td>
-        <td>Conor MacNeill (conor at cortexebusiness.com.au)</td>
-        <td><pre>
-&lt;ant&gt;
- \_/
-\(_)/
--(_)-
-/(_)\
-</pre></td>
-      </tr>
-      <tr>
-        <td>56</td>
-        <td>40</td>
-        <td>James Andrews (jimhole23 at yahoo.com)</td>
-        <td><img src="images/andrews2.gif"/></td>
-      </tr>
-      <tr>
-        <td>57</td>
-        <td>42</td>
-        <td>Eric Cain (arcain at unitedbinary.com)</td>
-        <td><img src="images/cain1.png"/></td>
-      </tr>
-      <tr>
-        <td>58</td>
-        <td>42</td>
-        <td>Eric Cain (arcain at unitedbinary.com)</td>
-        <td><img src="images/cain2.png"/></td>
-      </tr>
-      <tr>
-        <td>59</td>
-        <td>42</td>
-        <td>Eric Cain (arcain at unitedbinary.com)</td>
-        <td><img src="images/cain3.png"/></td>
-      </tr>
-      <tr>
-        <td>60</td>
-        <td>42</td>
-        <td>Eric Cain (arcain at unitedbinary.com)</td>
-        <td><img src="images/cain4.png"/></td>
-      </tr>
-      <tr>
-        <td>61</td>
-        <td>43</td>
-        <td>Scott Andrews (scott.andrews at bankofamerica.com)</td>
-        <td><img src="images/andrews3.gif"/></td>
-      </tr>
-      <tr>
-        <td>62</td>
-        <td>44</td>
-        <td>Joe Burkhart (joeburkhart99 at yahoo.com)</td>
-        <td><img src="images/burkhart.gif"/></td>
-      </tr>
-      <tr>
-        <td>63</td>
-        <td>45</td>
-        <td>Adam James (adam_james_ at hotmail.com)</td>
-        <td><img src="images/james.jpg"/></td>
-      </tr>
-      <tr>
-        <td>64</td>
-        <td>46</td>
-        <td>Kanat Bolazar (kanat2 at yahoo.com)</td>
-        <td><img src="images/bolazar.gif"/></td>
-      </tr>
-      <tr>
-        <td>65</td>
-        <td>37</td>
-        <td>fmignon at mail.com</td>
-        <td><img src="images/florent3.jpg"/></td>
-      </tr>
-      <tr>
-        <td>66</td>
-        <td>37</td>
-        <td>fmignon at mail.com</td>
-        <td><img src="images/florent4.jpg"/></td>
-      </tr>
-     </table>
-  </section>
-</body>
-</document>
diff --git a/xdocs/problems.xml b/xdocs/problems.xml
deleted file mode 100644
index 7947670..0000000
--- a/xdocs/problems.xml
+++ /dev/null
@@ -1,265 +0,0 @@
-<?xml version="1.0"?>
-<document>
-
-  <properties>
-    <author email="conor@apache.org">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
-              <code>-debug</code> flag rather than
-              <code>-verbose</code>.
-              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
-              <code>-logfile &lt;filename&gt;</code> 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 <code>ant-user</code> 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 <code>ant-dev</code> mailing
-            list. Once you have a fix for the problem, you may submit
-            the fix as a <i>patch</i> to either the <code>ant-dev</code> 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
-            <code>ant-dev</code> mailing list, prefix &quot;[PATCH]&quot;
-            to your message subject. Please include any relevant bug numbers.
-            Patch files should be created with the <code>-u</code>
-            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 f562ea5..0000000
--- a/xdocs/resources.xml
+++ /dev/null
@@ -1,359 +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>
-
-    </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="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>
-    </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 820deb6..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="artwork/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 be668d7..0000000
--- a/xdocs/stylesheets/templates.vm
+++ /dev/null
@@ -1,199 +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="center">
-    <a href="http://www.javaworld.com"><img src="images/jw_ec_logo_finalist2002.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/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